目录

  1. 1. 前言
  2. 2. Android系统架构
  3. 3. 环境配置
    1. 3.1. JDK
    2. 3.2. Android SDK
    3. 3.3. Android Studio
      1. 3.3.1. 下载
      2. 3.3.2. 汉化
      3. 3.3.3. 移动到非系统盘
  4. 4. Hello World
    1. 4.1. 新建项目
      1. 4.1.1. Gradle
    2. 4.2. 视图
    3. 4.3. 构建
  5. 5. 项目结构
    1. 5.1. app
  6. 6. Android四大组件
    1. 6.1. 活动 (Activity)
      1. 6.1.1. 创建活动
      2. 6.1.2. 创建和加载布局
      3. 6.1.3. 在AndroidManifest文件中注册
      4. 6.1.4. 在活动中使用Toast

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

Android开发学习

2023/12/10 Basic Android
  |     |   总文章阅读量:

前言

未曾设想的道路,如今要开辟了

参考:

安卓开发必备:https://developer.android.com/?hl=zh-cn

菜鸟教程:https://www.runoob.com/android

ctfwiki:https://ctf-wiki.org/android/basic_develop/basic_develop/

《第一行代码——Android(第2版)》—— 郭霖


Android系统架构

底层内核空间以 Linux Kernal 作为基石,

上层用户空间由 Native 系统库、虚拟机运行环境、框架层组成,

通过系统调用(Syscall)连通系统的内核空间与用户空间

image-20240125174448389

  • linux内核层:为安卓设备的各种硬件提供底层驱动
  • 系统运行库层:通过一些C/C++库为Android系统提供了主要的特性支持,如SQLite库(数据库)、OpenGL|ES库(3D绘图)、Webkit库(浏览器内核)

环境配置

JDK

jdk8以上,这里就不多说了

Android SDK

是谷歌提供的 Android 开发工具包

通过引入该工具包来使用 Android 相关的 API

Android Studio

下载

JB家不可避(

我直接在https://developer.android.com/studio?hl=zh-cn下的

汉化

直接在IDE里面的插件市场搜搜不到中文插件

要在外面下下来然后导入

参考:https://www.zhihu.com/tardis/zm/art/374517847?source_id=1003

版本要选择低一点能够兼容的

移动到非系统盘

参考:https://blog.csdn.net/weixin_42768634/article/details/115142632


Hello World

新建项目

image-20231210225545625

选择Empty Activity模板,这个模板可用于创建简单项目,可以用它来构建 Compose 应用

这个模板只有一个屏幕,并显示 "Hello Android!" 文本

image-20231210225852258

这里Language已经默认为Kotlin,因为Compose仅与Kotlin兼容

Minimum SDK:指定可运行应用的最低 Android 版本,据说版本越低运行越快

选择完配置之后就点击完成,开始构建项目

Gradle

构建工具,可以自动完成下载依赖、将源文件编译成二进制代码、打包等工作

Maven类似

视图

image-20231213015835193

构建

点一下上面的运行按钮开始构建,等待一段时间后就会启动模拟器

然后点开机键就运行了这个程序

image-20240211194219831


项目结构

接下来以Java语言进行编写

新建一个No Activity,语言选择Java

左上角选择为项目,就是我们熟悉的项目结构了

image-20240211211836873

  1. .gradle和.idea

    自动生成的文件

  2. app

    项目中的代码、资源等内容几乎都是放在这个目录下的

  3. build

    编译时自动生成的文件

  4. gradle

    gradle wrapper的配置文件

  5. .gitinore

    版本控制相关

  6. build.gradle

    项目全局的gradle构建脚本

  7. gradle.properties

    全局的gradle配置文件

  8. gradlew

    命令行界面执行gradle命令

剩下的自行查找吧(

app

image-20240211215120641

  1. build:依旧是编译时自动生成的

  2. libs:第三方jar包

  3. androidTest:编写测试用例

  4. java:放置我们所有java代码的地方

  5. res:图片(drawable)、布局(layout)、字符串(values)等资源(类似static资源)

  6. AndroidManifest.xml:整个Android项目的配置文件


Android四大组件

活动 (Activity)

一种可以包含用户界面的组件,主要用于和用户进行交互

一个应用程序中可以包含零个或多个活动

例:一个邮件应用程序可以包含一个活动用于显示新邮件列表,另一个活动用来编写邮件,再一个活动来阅读邮件。

当应用程序拥有多于一个活动,其中的一个会被标记为当应用程序启动的时候显示。

创建活动

新建一个 No Activity 项目,然后把目录结构切换成项目(Project)模式

image-20240409010739851

此时这个 com.example.activity 目录下就是空的,然后右键新建Empty Activity

image-20240409010858513

image-20240409011006355

Generate a Layout File:自动为此活动创建一个对应的布局文件

Launcher Activity:自动将此活动设置为当前项目的主活动

我们这里先都不选

项目中的任何活动都应该重写 Activity 的onCreate()方法,生成活动之后Android Studio已经帮我们重写好了

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

创建和加载布局

Android程序的设计讲究逻辑和视图分离,最好每一个活动都能对应一个布局,布局就是用来显示界面内容的

现在我们在 app/src/main/res 目录下新建一个layout目录

然后在layout目录下新建一个 Layout resource file,根元素选择 LinearLayout

image-20240409011831703

然后就会得到布局编辑器

image-20240409012124516

左边是对应的xml文件下的 LinearLayout 元素

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</LinearLayout>

现在我们加一个按钮进去

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 1"
        />
</LinearLayout>
  • android:id:给当前的元素定义一个唯一标识符,之后可以在代码中对这个元素进行操作

    XML中引用一个id:@id/id_name;XML中定义一个id:@+id/id_name

  • android:layout_width:指定当前元素的宽度,match_parent表示让当前元素和父元素一样宽

  • android:layout_height:指定当前元素的高度,wrap_content表示当前元素的高度刚好包含里面的内容

  • android:text:指定元素中显示的文字内容

此时的布局:

image-20240409012954575

成功显示了一个按钮,接下来加载布局

在 FirstActivity 的onCreate()方法中添加代码:

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
    }
}

调用setContentView()方法来给当前的活动加载一个布局,参数传入一个布局文件的id

项目添加的任何资源都会在R文件中生成一个相应的资源id,所以只要调用R.layout.first_layout就可以得到 first_layout.xml布局的id

在AndroidManifest文件中注册

所有的活动都要在 AndroidManifest.xml 中进行注册才能生效

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Activity"
        tools:targetApi="31">
        <activity
            android:name=".FirstActivity"
            android:exported="false" />
    </application>

</manifest>

可以看到活动的注册声明要放在<application>标签内,这里通过<activity>标签来对活动进行注册

<activity>标签中我们使用了android:name来指定具体注册哪一个活动,这里的.FirstActivity即包名的缩写

接下来给程序配置主活动,这样程序运行的时候才能首先启动一个活动

修改 activity 标签

<activity
    android:name=".FirstActivity"
    android:label="This is FirstActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

至此,一切准备就绪,运行一下程序

image-20240412012951184

可以看到界面最顶部是一个标题栏,里面显示着我们刚才在注册活动时指定的内容

标题栏的下面就是在布局文件 first_layout.xml 中编写的界面,可以看到我们刚刚定义的按钮


在活动中使用Toast

Toast 是 Android 系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间

在点击按钮时弹出一个Toast,修改onCreat()方法:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_layout);
    Button button1 = (Button) findViewById(R.id.button_1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(FirstActivity.this,"You clicked Button 1",Toast.LENGTH_LONG).show();
        }
    });
}

在活动中,可以通过findViewById方法获取到在布局文件中定义的元素,这里传入R.id.button_1来得到按钮的实例,这个值是刚才在 first_layout.xml 中通过 android:id 属性指定的

findViewById()会返回一个 View 对象,所以我们需要向下转型将它转成 Button 对象

得到按钮实例后,调用setOnClickListener为按钮注册一个监听器,点击按钮时就会执行监听器中的onClick方法,于是就是在onClick方法中编写弹出 Toast 的功能

Toast通过makeText创建出一个 Toast 对象,然后调用show即可显示出来,注意 makeText 要传入三个参数:

  1. Context,也就是Toast要求的上下文,由于活动本身就是一个Context对象,因此直接传入 FirstActivity.this 即可
  2. Toast显示的文本内容
  3. Toast显示的时长,有两个内置常量可以选择:Toast.LENGTH_SHORTToast.LENGTH_LONG

image-20240412014007386