Android 开发入门(1)
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)开发工具
- 集成开发工具:Android Studio
- 软件开发工具包:Android SDK
0x02 第一个项目
(1)创建项目
选择新建项目
选择 Phone and Tablet 下的 Empty Activity
Activity 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务
设置:语言为 Java,最低 SDK 为 API 28
选择完成
暂时忽略代理连接
(2)创建内置虚拟手机
- 在右侧选项卡栏中,选择 Device Manager
- 选择 Create device
- 选择屏幕尺寸
- 选择在该设备安装 Android 11
- 完成
异常处理:
(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)运行环境
在虚拟手机上运行
在真实手机上运行
在手机上执行以下操作:设置 > 关于手机 > 点击版本号(反复点击直至提示已经打开了开发者模式)
在开发者选项中,启动 USB 调试
使用 USB 将手机与电脑连接
在电脑上执行命令
adb devices -l
来查看已连接的设备adb 为 Android SDK 目录中 platform-tools 内的程序,将其设置为系统变量 adb
adb:Android Debug Bridge
调试运行原理:
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.propertiesmanifests:仅有 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_width
、android:layout_height
- 布局位置:
android:gravity
- 填充父容器:
match_parent
,可以用于填充整个屏幕 - 布局方向:
android:orientation
- 命名空间:
- 文本控件:
<TextView></TextView>
- 设置 ID:
android:id
- 自适应:
wrap_content
- 文本内容:
android:text
- 设置 ID:
<?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
在 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" />
创建与 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);
}
});
}
}
在 AndroidManifest.xml 中注册页面配置
在 application 标签下添加新 activity 标签:
<activity android:name=".MainActivity2"></activity>
Android 开发入门(1)的更多相关文章
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...
- [译]:Xamarin.Android开发入门——Hello,Android深入理解
返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...
- [译]:Xamarin.Android开发入门——Hello,Android快速上手
返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...
- 教我徒弟Android开发入门(一)
前言: 这个系列的教程是为我徒弟准备的,也适合还不懂java但是想学android开发的小白们~ 本系列是在Android Studio的环境下运行,默认大家的开发环境都是配置好了的 没有配置好的同学 ...
- Android开发入门经典【申明:来源于网络】
Android开发入门经典[申明:来源于网络] 地址:http://wenku.baidu.com/view/6e7634050740be1e650e9a7b.html?re=view
- Android开发入门要点记录:四大组件
cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...
- Android开发入门
教我徒弟Android开发入门(一) 教我徒弟Android开发入门(二) 教我徒弟Android开发入门(三) 出处:http://www.cnblogs.com/kexing/tag/Androi ...
- android开发入门经验 ADT Bundle环境搭建
现在有许多做开发的转做移动端开发,做J2EE的转做Android开发,我也把自己的一些入门经验与大家分享一下,希望能给你带来帮助. 工具/原料 JDK,ADT,JAVA 方法/步骤 开发工具的准备 ...
- [Android]Android开发入门之HelloWorld
引言:在做Unity开发的时候,发现这么个问题,虽然Unity是跨平台的,能够进行Android,IOS,Web,PC等开发,但如果要实现一些稍微系统层的东西,还是需要通过通信,调用原系统的接口(自定 ...
- 教我徒弟Android开发入门(二)
前言: 上一期实现了简单的QQ登录效果,这一期继续对上一期进行扩展 本期的知识点: Toast弹窗,三种方法实现按钮的点击事件监听 正文: Toast弹窗其实很简单,在Android Studio ...
随机推荐
- 第18章_MySQL8其它新特性
# 目录: https://www.cnblogs.com/xjwhaha/p/15844178.html 1. MySQL8新特性概述 MySQL从5.7版本直接跳跃发布了8.0版本,可见这是一个令 ...
- 仅需10秒!ChatGPT轻松画出UML用例图,我却苦战10分钟。
当我们写技术文档时,一张系统用例图,平时要花费10分钟才完成,而ChatGPT绘图过程只用了10秒钟,基本可以达到同样的水平,通过ChatGPT可以显著提高画流程图的效率. 什么是用例图 用例图是统一 ...
- Python函数对象与闭包函数
[一]函数对象 函数对象指的是函数可以被当做 数据 来处理,具体可以分为四个方面的使用 [1]函数可以被引用 def add(x,y): return x + y func = add res = f ...
- opus编解码的特色和优点
概念原理 Opus是一个有损音频压缩的数字音频编码格式,由Xiph.Org基金会开发,之后由互联网工程任务组(IETF)进行标准化,目标是希望用单一格式包含声音和语音,取代Speex和Vorbis ...
- BigDecimal类处理高精度计算
BigDecimal类处理高精度计算 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数,但 ...
- B站Aimls的JavaFx教程目录合集
B站里有时候不太好去找资源,用JS爬了下,整出标题和链接,方便后续查询某个知识点的使用! JavaFX视频教程第1课,hello world JavaFX视频教程第2课,application的启动方 ...
- IDEA或Android Studio用书签功能标识代码
原文地址:IDEA或Android Studio用书签功能标识代码 | Stars-One的杂货小窝 在之前的维护工作中,有时候翻源码的时候,找到了一个文件的某行关键,之后一层层进去之后,又突然不记得 ...
- C++类的访问权限
首先明确一个类的用户有三种: 一类用户:类的成员和友元 二类用户:子类的成员及子类的友元 三类用户:外部的用户代码(通过类的对象或指针) 一个类有三种成员 private:只有一类用户可以访问priv ...
- 3DCAT亮相糖酒会,为元宇宙展会提供实时云渲染支持
4月12日,第108届全国糖酒商品交易会(下文简称"糖酒会")在成都正式开幕,吸引了众多酒类企业和行业人士的参与. 图片源自新华社 本次糖酒会上,某展会采用了"双线&qu ...
- 计算机网络-DNS以及FastGitHub
前言 你是否观察到过这种现象,在访问Github时,有的时候能正常访问,有的时候再次刷新就访问不了,那么能不能有什么办法能一直访问.答案是有,就是在DNS层面能保证一直稳定获取可用并且快速的IP,这就 ...