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. Advanced .Net Debugging 3:基本调试任务(上)

    一.简介 这是我的<Advanced .Net Debugging>这个系列的第三篇文章.这个系列的每篇文章写的周期都要很长,因为每篇文章都是原书的一章内容(太长的就会分开写).再者说,原 ...

  2. 被 两个 vetur 玩惨了的几天,可不是vue-helper的锅

    最近由idea 转 vscode,因为 由原来一个项目变成7个项目了,2G内存不够看. 然后发现点击组件跳转不好使,装个vue-helper也是有一部分不好使. 下载vue-helper源码一通查,发 ...

  3. 常用Linux系统性能分析命令

    Linux系统提供了许多命令来分析系统性能.以下是一些常用的Linux系统性能分析命令: top:实时监视系统的运行状态和进程信息,包括CPU使用率.内存使用情况.进程状态等. 实例:直接在终端中输入 ...

  4. 基于ads1292的心率呼吸信号检测解决方案开发阶段总结

    前记 在医疗可穿戴领域,ads1292是一个无法绕过去的存在.今年几个项目产品都和这个芯片有关系. 从不了解到熟悉,算是踩了不少坑吧.对每次的项目进行复盘,是我这些年养成的最好的习惯了. ads129 ...

  5. RV1126编译过程

    一.编译环境 1.目标系统:ubuntu 22.04 LTS 2.投屏器SDK下载: 链接:https://pan.baidu.com/s/1OJQafxm38FnbshMEu432Og 提取码:o6 ...

  6. vmware虚拟机共享文件夹显示不出来的解决办法

    今天在虚拟机里部署测试环境时,遇到一个问题,就是在vmware设置里明明共享了文件夹,但是在CentOS里却看不到共享的文件夹 环境 宿主机:MacBook Pro 虚拟机:vmware 15 虚拟机 ...

  7. AI 学习时代:大语言模型领域的行业黑话和专业术语解析

    近年来,深度学习技术的快速发展带动了大语言模型在自然语言处理领域的广泛应用.在这个激动人心的领域里,我们常常会遇到一些行业黑话和专业术语.为了帮助大家更好地入门,让我们深入探讨一些关键概念,以及它们在 ...

  8. 专访OV季军|毕业转为freelancer,他如何斩获大量CG奖项?

    "新锐先锋,玩转未来"--首届实时渲染3D动画创作大赛由瑞云科技主办,英伟达.青椒云.3DCAT实时渲染云协办,戴尔科技集团.Reallusion.英迈.万生华态.D5渲染器.中视 ...

  9. 深入分析Java中的PriorityQueue底层实现与源码

    本文分享自华为云社区<滚雪球学Java(70):深入理解Java中的PriorityQueue底层实现与源码分析>,作者: bug菌. 环境说明:Windows 10 + IntelliJ ...

  10. 06.Java虚拟机问题

    目录介绍 6.0.0.1 运行时数据区域有哪些?Java虚拟机栈是做什么的?本地方法栈又是做什么的? 6.0.0.2 对象的内存布局?对象的访问定位方式有哪些?使用指针访问和使用句柄访问各具有何优势? ...