0x01 准备

(1)概述

安卓(Android)基于 Linux 内核开发的操作系统,由 Google 等领导开发。

(2)版本

Android 版本号 API 发布时间
Android 14 - 2023
Android 13 33 2022.2
Android 12 31 2021.10
Android 11 30 2020.9
Android 10 29 2019.8
Android 9 28 2018.8
Android 8 26/27 2017.8
Android 7 24/25 2016.8
Android 6 23 2015.9
Android 5 21/22 2014.6
Android 4.4 19/20 2013.9

以上可见 Android 技术迭代非常快,既体现了 Android 开发社区的活跃,也说明了面对新版本的新特性需要不断学习。

(3)开发工具

0x02 第一个项目

(1)创建项目

  1. 选择新建项目

  2. 选择 Phone and Tablet 下的 Empty Activity

    Activity 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务

  3. 设置:语言为 Java,最低 SDK 为 API 28

  4. 选择完成

  5. 暂时忽略代理连接

(2)创建内置虚拟手机

  1. 在右侧选项卡栏中,选择 Device Manager
  2. 选择 Create device
  3. 选择屏幕尺寸
  4. 选择在该设备安装 Android 11
  5. 完成

异常处理:

(3)观察 App 运行日志

  • log.e:error,错误消息,可能导致程序崩溃的异常
  • log.w:warn,警告信息
  • log.i:info,一般信息
  • log.d:debug,调试信息,可把程序运行时的变量值打印出来,方便跟踪调试
  • log.v:verbose,冗余信息

举例:

// 在 MainActivity.java 中
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 添加下述代码
Log.d("testTags", "onCreate");
}
}

执行后打开 Logcat,通过筛选 Debug 信息可以发现以下信息:

202x-xx-xx xx:xx:xx.xxx 7709-7709/com.example.myapplication D/testTags: onCreate

0x03 开发基础

(1)运行环境

  • 在虚拟手机上运行

  • 在真实手机上运行

    1. 在手机上执行以下操作:设置 > 关于手机 > 点击版本号(反复点击直至提示已经打开了开发者模式)

    2. 在开发者选项中,启动 USB 调试

    3. 使用 USB 将手机与电脑连接

    4. 在电脑上执行命令adb devices -l来查看已连接的设备

      adb 为 Android SDK 目录中 platform-tools 内的程序,将其设置为系统变量 adb

      adb:Android Debug Bridge

调试运行原理:

graph LR
PC--adb-->A(Android OS<br/>AVD)
A--adb-->PC

(2)开发语言

  • App 开发路线:原生开发、混合开发

    • 原生开发包括 Java、Kotlin、C/C++、XML,性能更好
    • 混合开发包括 HTML5、Flutter、React Native 等,可以跨平台
  • Android 官方编程语言:Java、Kotlin

(3)使用数据库

Android 内置了专门的数据库—— SQLite,其语法类似于 MySQL,属于嵌入式数据库

(4)工程结构

  • App 工程分为两个层次:项目、模块

    • 模块依附于项目,项目之下可以由多个模块
    • 每个模块对应实际的 App
  • App 项目分为两类:app、Gradle Scripts

    graph TB
    a(App 项目)-->b
    a-->c
    b(app)-->manifests
    b-->java
    b-->res
    c(Gradle Scripts)-->build.gladle
    c-->proguard-rules.pro
    c-->gradle.properties
    c-->settings.gradle
    c-->local.properties
    • manifests:仅有 AndroidManifest.xml,是 App 的运行配置文件

      application 节点属性 说明
      android:allowBackup 是否允许应用备份,true 或 false
      android:icon 显示的图标
      android:label 显示的名称
      android:roundIcon 圆角图标
      android:supportRtl 是否支持阿拉伯语等从右到左文字排列顺序
      android:theme 显示风格
    • java:有三个 com.example.myapp 包,第一个存放当前模块 Java 源代码,其他存放测试用

    • res:存放当前模块的资源文件

      • drawable:存放图形描述文件和图片文件
      • layout:存放 App 页面的布局文件
      • mipmap:存放 App 的启动图标
      • values:存放常量定义文件
        • 字符串常量:strings.xml
        • 像素常量:dimens.xml
        • 颜色常量:colors.xml
        • 样式风格定义:styles.xml
    • build.gradle:分为项目级、模块级,描述 App 工程的编译规则

      • 项目级:指定了当前项目的总体编译规则
      • 模块级:指定了当前模块的总体编译规则
    • proguard-rules.pro:描述 Java 代码的混淆规则

    • gradle.properties:配置编译工程的命令行参数

    • settings.gradle:配置了需要编译哪些模块

    • local.properties:项目的本地配置文件

(5)设计规范

  • XML:用于描绘应用界面,类比前端

    在 activity_main.xml 文件中操作

    • 线性布局标签:<LinearLayout></LinearLayout>

      • 命名空间:xmlns:android="http://schemas.android.com/apk/res/android"
      • 布局宽高:android:layout_widthandroid:layout_height
      • 布局位置:android:gravity
      • 填充父容器:match_parent,可以用于填充整个屏幕
      • 布局方向:android:orientation
    • 文本控件:<TextView></TextView>
      • 设置 ID:android:id
      • 自适应:wrap_content
      • 文本内容:android:text
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"> <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello Android" /> </LinearLayout>
  • Java:用于控制程序逻辑,类比后端

    在 MainActivity.java 文件中操作

    • 调用布局:

      setContentView(R.layout.activity_main);
    • 修改 XML 文件中文本控件中的文本内容

      import android.widget.TextView;
      
      public class MainActivity extends AppCompatActivity {
      
          @Override
      protected void onCreate(Bundle savedInstanceState) {
      // ...
      TextView textView = findViewById(R.id.textView);
      textView.setText("你好安卓");
      }
      }

(6)Activity 的创建与跳转

可以直接右键 package(即com.example.application) 新建项目:/Activity/Empty_Activity

  1. 在 layout 目录下创建 XML 文件

    创建 activity_main2.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"> <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/app_name" /> </androidx.constraintlayout.widget.ConstraintLayout>

    其中,TextView 标签中的 Text 属性值可以在 values/strings.xml 中设置:

    <resources>
    <string name="app_name">My Application</string>
    <string name="text2">Activity Main 2</string>
    </resources>

    修改 activity_main.xml,添加按钮用于跳转:

    <Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Skip" />
  2. 创建与 XML 文件对应的 Java 文件

    创建 MainActivity2.java:

    package com.example.myapplication;
    
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity2 extends AppCompatActivity { @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    }
    }

    修改 MainActivity.java,添加按钮事件:

    package com.example.myapplication;
    
    import // ...
    import android.content.Intent;
    import android.widget.Button public class MainActivity extends AppCompatActivity { @Override
    protected void onCreate(Bundle savedInstanceState) {
    // ...
    Button button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    Intent intent = new Intent();
    intent.setClass(MainActivity.this, MainActivity2.class);
    startActivity(intent);
    }
    });
    }
    }
  3. 在 AndroidManifest.xml 中注册页面配置

    在 application 标签下添加新 activity 标签:

    <activity android:name=".MainActivity2"></activity>

点我进入下一节


Android 开发入门(1)的更多相关文章

  1. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

  2. [译]:Xamarin.Android开发入门——Hello,Android深入理解

    返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...

  3. [译]:Xamarin.Android开发入门——Hello,Android快速上手

    返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...

  4. 教我徒弟Android开发入门(一)

    前言: 这个系列的教程是为我徒弟准备的,也适合还不懂java但是想学android开发的小白们~ 本系列是在Android Studio的环境下运行,默认大家的开发环境都是配置好了的 没有配置好的同学 ...

  5. Android开发入门经典【申明:来源于网络】

    Android开发入门经典[申明:来源于网络] 地址:http://wenku.baidu.com/view/6e7634050740be1e650e9a7b.html?re=view

  6. Android开发入门要点记录:四大组件

    cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...

  7. Android开发入门

    教我徒弟Android开发入门(一) 教我徒弟Android开发入门(二) 教我徒弟Android开发入门(三) 出处:http://www.cnblogs.com/kexing/tag/Androi ...

  8. android开发入门经验 ADT Bundle环境搭建

    现在有许多做开发的转做移动端开发,做J2EE的转做Android开发,我也把自己的一些入门经验与大家分享一下,希望能给你带来帮助. 工具/原料 JDK,ADT,JAVA 方法/步骤   开发工具的准备 ...

  9. [Android]Android开发入门之HelloWorld

    引言:在做Unity开发的时候,发现这么个问题,虽然Unity是跨平台的,能够进行Android,IOS,Web,PC等开发,但如果要实现一些稍微系统层的东西,还是需要通过通信,调用原系统的接口(自定 ...

  10. 教我徒弟Android开发入门(二)

    前言: 上一期实现了简单的QQ登录效果,这一期继续对上一期进行扩展 本期的知识点: Toast弹窗,三种方法实现按钮的点击事件监听 正文:   Toast弹窗其实很简单,在Android Studio ...

随机推荐

  1. Nginx 打不开 80端口占用 netstat -aon|findstr "80" 看有没有80占用 有的话 net stop http

    Nginx 打不开 80端口占用 netstat -aon|findstr "80" 看有没有80占用 有的话 net stop http

  2. Apollo3 Blue SoC 和 Apollo3 Blue Plus SoC的区别

    一 芯片简介 1.简介 Apollo3 Blue系列SoC解决方案代表了超低功耗设计的巨大飞跃,其运行模式和睡眠模式下的功耗数值均十分出色,并且具有高性能的处理引擎. Apollo3Blue器件提供了 ...

  3. [TM4] TM4C123G Keil5 新建工程指南

    [TM4] TM4C123G Keil5 新建工程指南 keil新建工程,选择TM4C123GH6PM芯片,然后在CMSIS勾选CORE,DEVICE勾选Startup(如图),来到新工程界面 在So ...

  4. 智慧党建3D可视化方案,扩大党建文化宣传数字网络影响力

    信息技术的快速发展加快了社会分化解构,重构了人际传播渠道.随着党员中网民."数字原住民"比重持续攀升,党员工作生活信息化.网络化.数据化持续加深,传统的党建方式对党员,特别是年轻一 ...

  5. ProtoBuf-gRPC实践

    目录介绍 01.gRPC学习背景 1.1 为什么要学RPC 1.2 RPC是什么 1.3 网络库收益分析 1.4 学习计划说明 1.5 学习问题思考 02.ProtoBuf的介绍 2.1 ProtoB ...

  6. 03.视频播放器Api说明

    03.视频播放器Api说明 目录介绍 01.最简单的播放 02.如何切换视频内核 03.切换视频模式 04.切换视频清晰度 05.视频播放监听 06.列表中播放处理 07.悬浮窗口播放 08.其他重要 ...

  7. 三维模型3DTile格式轻量化压缩处理的数据质量提升方法分析

    三维模型3DTile格式轻量化压缩处理的数据质量提升方法分析 在处理三维模型3DTile格式的轻量化压缩时,如何在减少数据量的同时,保证或提升数据质量是一大挑战.以下为一些提升数据质量的方法分析: 改 ...

  8. Java原生序列化与反序列化

    序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么需要序列化? 序列化分为两大部分:序列化和反序列化.序列化是这 ...

  9. Java12版本特性【一文了解】

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  10. Vue3项目-生成Cron表达式组件

    最近做的一个vue3项目过程中,需要用到cron表达式功能,而对于普通业务人员,他们是不懂cron表达式规则的,所以需要做一个可手动配置生成cron表达式的功能.从网上查找了一些相关资料,然后结合vu ...