100天精通Andriod逆向——第6天:Andriod 开发入门

发布于:2023-01-04 ⋅ 阅读:(423) ⋅ 点赞:(0)

学习逆向也需要具备一定的开发知识,是否做过开发决定你一定程度逆向的上限
本小节简单了解一个 andriod app 是如何诞生的
前置知识:https://blog.csdn.net/xw1680/article/details/126117653

一、创建 Android 应用程序

Android Studio 安装完成后,如果还没有创建项目,将进入到欢迎对话框。在该对话框中,可以创建新项目、打开已经存在的项目、导入项目等。在 Android Studio 中,一个 project(项目) 相当于一个工作空间,一个工作空间中可以包含多个 Module(模块),每个 Module 对应一个 Android 应用。下面将通过一个具体的实例来介绍如何创建项目,即创建第一个 Android 应用。

说明:在首次创建项目时,需要联网加载数据,所以此时需要保证电脑可以正常连接互联网。

1.1 在屏幕上输出文字 Hello World

在 Android Studio 中创建项目,名称为 第一个 Android 应用,具体步骤如下:

1、在 Android Studio 的欢迎对话框中,单击 New Project 按钮
在这里插入图片描述
2、进入选择创建 Activity 类型对话框,在该对话框中,将列出一些用于创建 Activity 的模板,我们可以根据需要进行选择,也可以选择不创建 Activity(即选择 Add No Activity),这里我们选择创建一个空白的 Activity,即 Empty Activity,如下图所示:
在这里插入图片描述
3、在下图所示的 New Project 界面中输入以下内容:

  1. Name(应用名称):FirstAndroidProject 应用名称将显示在系统的程序组界面中,此处命名为:FirstAndroidProject
  2. Package name(包名称):com.amoxiang.firstandroidproject,包名称可以采用默认值,也可以自己重新命令,一般为 com.****.**** 的格式
  3. Save location(存储路径):E:\Code\andriod_project\FirstAndroidProject 存储路径为项目文件的存储位置
  4. Language(开发语言):开发语言默认为 Kotlin(Kotlin 是简化的 Java 表达形式),在新版本的 Android Studio 中,Google 推荐使用 Kotlin 作为 Android 的开发语言,新手建议选择 Java 作为开发语言,这里选择 Java
  5. Minimum SDK(最低运行版本):最低运行版本根据需要选择,表明当前应用运行的最低 Android 版本要求;其他参数可以采用默认值。最后单击 Finish 按钮完成应用项目的创建。
    在这里插入图片描述
    单击 Finish 按钮,将显示下图所示的创建进度对话框(第一次加载时间可能会比较长,请耐心等待),创建完成后,该对话框自动消失,同时打开该项目。
    在这里插入图片描述

4、同步完成后,默认显示 MainActivity.java 文件的内容,如下图所示:
在这里插入图片描述
说明:在使用 Android Studio 创建一个项目时,默认会创建一个名称为 app 的 Module(一个 Module 就是一个 Android 应用),展开 app 结构如下图所示:
在这里插入图片描述
说明:在使用 Android Studio 创建过一个项目后,再次创建项目时,需要在已经打开的项目中,选择 File →New→ New Project 菜单项,打开创建新项目对话框,如下图所示:
在这里插入图片描述

二、Android 项目结构

在 Android Studio 中,提供了下图所示的多种项目结构类型:
在这里插入图片描述
其中,最常用的是 Android 和 Project。由于 Android 项目结构类型是创建项目后默认采用的,所以这里我们就使用这种结构类型。
在这里插入图片描述

2.1 manifests 节点

manifests 节点用于显示 Android 应用程序的配置文件。通常情况下,每个 Android 应用程序必须包含一个 AndroidManifest.xml 文件,位于 manifests 节点下。它是整个 Android 应用的全局描述文件。在该文件内,需要标明应用的名称、使用图标、Activity 和 Service 等信息,否则程序不能正常启动。例如,第一个Android应用 中的 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"
    package="com.amoxiang.firstandroidproject">

    <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.FirstAndroidProject"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

AndroidManifest.xml 文件中的重要元素及说明如下表所示:

元素 说明
manifest 根节点,描述了 package 中所有的内容
xmlns:android 包含命名空间的声明,其属性值为 http://schemas.android.com/apk/res/android,表示 Android 中的各种标准属性能在该 xml 文件中使用,它提供了大部分元素中的数据
package 声明应用程序包
application 包含 package 中 application 级别组件声明的根节点,一个 manifest 中可以包含零个或者一个该元素
android:icon 应用程序图标
android:label 应用程序标签,即为应用程序指定名称
android:theme 应用程序采用的主题,例如,第一个 Android 应用 创建的项目默认采用 @style/Theme.FirstAndroidProject
activity 与用户交互的主要工具,它是用户打开一个应用程序的初始页面
intent-filter 配置 Intent 过滤器
action 组件支持的 Intent Action
category 组件支持的 Intent Category,这里通常用来指定应用程序默认启动的 Activity

注意:在 Android 程序中,每一个 Activity 都需要在 AndroidManifest.xml 文件中有一个对应的 <activity> 标记。

2.2 java 节点

java 节点用于显示包含了 Android 程序的所有包及源文件(.java),例如, 第一个Android应用 项目的 java 节点展开效果如下图所示:
在这里插入图片描述
默认生成的 MainActivity.java 文件的关键代码如下:

package com.amoxiang.firstandroidproject;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

从上面的代码可以看出,Android Studio 创建的 MainActivity 类默认继承自 AppCompatActivity 类(继承自 AppCompatActivity 类的 Activity 将带有 Action Bar),并且在该类中,重写了 Activity 类中的 onCreate() 方法,在 onCreate() 方法中通过 setContentView(R.layout.activity_main) 方法设置当前的 Activity 要显示的布局文件。

说明:这里使用 R.layout.activity_main 来获取 layout 目录中的 activity_main.xml 布局文件,这是因为在 Android 程序中,每个资源都会在 R.java 文件中生成一个索引,而通过这个索引,开发人员可以很方便的调用 Android 程序中的资源文件。

应用 Android Studio 创建的项目,R.java 文件位于新创建应用的

<应用名称>build\generated\source\r\debug\<包路径> 目录下

R.java 文件是只读文件,开发人员不能对其进行修改,当 res 包中资源发生变化时,该文件会自动修改。

2.3 res 节点

该节点用来显示保存在 res 目录下的资源文件,当 res 目录中的文件发生变化时,R 文件会自动修改。在 res 目录中还包括一些子目录,下面将对这些子目录进行详细说明。

1、drawable子目录。 drawable 子目录通常用来保存图片资源(如 PNG\JPEG\GIF图片、9-Patch 图片或者 Shape 资源文件等)

2、layout子目录。 layout 子目录主要用来存储 Android 程序中的布局文件,在创建 Android 程序时,会默认生成一个 activity_main.xml 布局文件。例如,第一个Android应用 项目的 layout 子目录的结构如下图所示:
在这里插入图片描述
在 Android Stuido 中打开 activity_main.xml 布局文件的代码如下图所示:
在这里插入图片描述
activity_main.xml 布局文件中的重要元素及说明如下表所示:

元 素 说 明
ConstraintLayout 布局管理器
xmlns:android 包含命名空间的声明,其属性值为 http://schemas.android.com/apk/res/android,表示 Android 中的各种标准属性能在该 xml 文件中使用,它提供了大部分元素中的数据,该属性一定不能省略
xmlns:tools 指定布局的默认工具
android:layout_width 指定当前视图在屏幕上所占的宽度
android:layout_height 指定当前视图在屏幕上所占的高度
TextView 文本框组件,用来显示文本
android:text 文本框组件显示的文本

技巧:开发人员在指定各个元素的属性值时,可以按下 <Ctrl+Alt + Space> 快捷键来显示帮助列表,然后在帮助列表中选择系统提供的值,如下图所示:
在这里插入图片描述
另外,Android Studio 提供了可视化的布局编辑器来辅助用户开发布局文件,如下图所示。在该编辑器内,可以通过拖动组件实现界面布局。

3、mipmap子目录。 mipmap 子目录用于保存项目中应用的启动图标。为了保证良好的用户体验,需要为不同的分辨率提供不同的图片,并且分别存放在不同的目录中。通常情况下,Android Studio 会自动创建 mipmap-xxxhdpi(超超超高)、mipmap-xxhdpi(超超高)、mipmap-xhdpi(超高)、mipmap-hdpi(高) 和 mipmap-mdpi(中) 等5个目录,分别用于存放超超超高分辨率图片、超超高分辨率图片、超高分辨率图片、高分辨率图片和中分辨率图片。并且会自动创建对应5种分辨率的启动图标文件(ic_launcher.webp) 以及 mipmap-anydpi-v26 目录中的两个自适应图标文件,如下图所示:
在这里插入图片描述
说明:由于从 android 7.1.1 开始系统中应用图标为圆形图标,所以为了让其他版本的系统正常使用高版本开发的应用。mipmap 子目录中将自动生成圆形与方形两种图标。

4、values子目录。 values 子目录通常用于保存应用中使用的字符串、样式和颜色资源。例如,第一个Android应用 的 values 子目录的结构如下图所示:
在这里插入图片描述
在开发国际化程序时,这种方式尤为方便。strings.xml 文件的代码如下:

<resources>
    <string name="app_name">FirstAndroidProject</string>
<!--    <string name="app_name">第一个Android应用</string>-->
</resources>

2.4 Gradle Scripts

Gradle Scripts 文件夹中主要是项目的编译配置脚本文件,主要包含以下文件:

  1. build.gradle:该文件分为项目级和模块级两种,用于描述工程的编译规则。
  2. proguard-rules.pro:用于描述 java 文件的代码混淆规则。
  3. gradle.properties:用于配置编译工程的命令行参数,一般无须改动。
  4. settings.gradle:配置哪些模块在一起编译。初始内容为 include ':app',表示只编译app模块。
  5. local.properties:项目的本地配置,一般无须改动。该文件是在工程编译时自动生成的,用于描述开发者本机的环境配置,如SDK的本地路径、NDK的本地路径等。

三、使用 Android 模拟器

Android 模拟器是 Google 官方提供的一款运行 Android 程序的虚拟机,可以模拟手机/平板电脑等设备。作为 Android 开发人员,不管你有没有基于 Android 操作系统的设备,都可能需要在 Android 模拟器上测试自己开发的 Android 程序。

说明:AVD 是 Android Virtual Device 的简称。通过它可以对 Android 模拟器进行自定义的配置,能够配置 Android 模拟器的硬件列表、模拟器的外观、支持的 Android 系统版本、附加 SDK 库和存储设置等。开发人员配置好 AVD 以后就可以按照这些配置来模拟真实的设备。

由于启动 Android 模拟器需要配置 AVD,所以在运行 Android 程序之前,首先需要创建 AVD。创建 AVD 并启动 Android 模拟器的步骤如下:

1、单击 Android Studio 工具栏 在这里插入图片描述
图标,显示 AVD 管理器对话框,如下图所示:
在这里插入图片描述
2、单击 Create Virtual Device… 按钮,将弹出 Select Hardware 对话框,在该对话框中,选择想要模拟的设备。例如,如果我们要模拟 3.2寸HVGA 的设备,那么可以选择 32" HVGA slider(ADP1),如下图所示:
在这里插入图片描述
3、单击 Next 按钮,将弹出选择系统镜像对话框,在该对话框中,下载系统镜像,如下图所示,这里选择它即可。
在这里插入图片描述

说明:如果没有可选择的系统镜像,也可以单击 Download 下载需要的其他版本的系统镜像

4、单击 Next 按钮,将弹出验证配置对话框,在该对话框的 AVD Name 文本框中输入 AVD 名称,这里设置为 Pixel1,其他采用默认,如下图所示:
在这里插入图片描述
5、单击 Finish 按钮,完成 AVD 的创建。AVD 创建完成后,将显示在 AVD Manager 对话框中,如下图所示:
在这里插入图片描述

说明:在上图所示的 AVD Manager 对话框中,单击右三角按钮,可以启动 AVD;单击按钮铅笔,可以编辑当前 AVD 的配置信息;单击按钮下三角,将弹出下图所示的快捷菜单,通过该菜单可以实现查看 AVD 的详细配置、删除 AVD 或者停止已经启动的模拟器等操作;单击按钮 create…,可以再创建新的AVD。

请添加图片描述
6、单击右三角按钮,即可启动 AVD。第一次启动将显示如下图所示界面:

四、运行 Android 应用

创建 Android 应用程序后,还需要运行查看其显示结果。要运行 Android 应用程序,可以有两种方法,一种是通过 Android 提供的模拟器来运行应用;另一种是在电脑上连接手机,然后通过该手机来运行应用。

4.1 使用模拟器运行 Android 应用

使用模拟器来运行 Android 应用适用于没有 Android 手机,或者测试各系统版本下应用的兼容性的情况。在 Android Studio 中,通过模拟器运行 第一个Android应用 的具体步骤如下:

1、启动模拟器
2、在工具栏中找到 app 下拉列表框,选择要运行的应用(这里为app)
在这里插入图片描述
3、再单击右侧右三角的按钮,启动模拟器,并运行程序。启动完毕后,在模拟器中将显示刚刚创建的应用,运行效果如下图所示:

4.2 连接手机运行 Android 应用

接下来我们学习如何连接手机运行 Android 应用。该方法更加符合用户场景,易于发现一些与硬件有关的问题,但是一般手机的系统很难与最新的 SDK 版本统一,所以对于一些 SDK 的新特性还是需要使用模拟器测试。

通过手机来运行 第一个Android应用,具体步骤如下:

1、将 Android 系统的手机通过 USB 连接线连接到电脑上
2、开启 USB 调试。对于不同的手机,显示的是否允许 USB 调试的方式可能不同,只要根据自己的手机提示进行选择就可以
3、返回到 Android Studio 中,在工具栏中,找到 app 下拉列表框,然后单击要运行的项目(这里为app),选中表格中显示的已经运行的 Google Pixel 手机,再单击 右三角 运行按钮,即可在手机上运行该应用。
在这里插入图片描述
4、项目运行后,在手机上将显示运行效果,如下图所示:

五、Android 应用程序的调试

Android Studio 窗口包含了 Terminal、Build、Logcat 等视图,在窗口底部可以进行视图切换。其中, Terminal 视图用于在命令行方式下执行 Android 平台提供的一些命令;Build 视图用于查看项目的编译和构建信息;Logcat 视图用于查看 Android 设备运行的日志信息。

5.1 Logcat 视图

在开发过程中会遇到各种各样的问题,需要开发人员耐心调试。一般程序错误可以使用 Android Studio 中的 Logcat 视图查看错误,例如前面创建的程序,如果将 onCreate() 方法修改成如下代码:

package com.amoxiang.firstandroidproject; //指定包

//导入AppCompatActivity类
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;// //导入Bundle类

public class MainActivity extends AppCompatActivity {
    //该方法在创建Activity时被回调,用于对该Activity执行初始化
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Object object = null;  //新添加的第1行代码
        object.toString();//新添加的第2行代码
        setContentView(R.layout.activity_main);
    }
}

同 Java 语言一样,这段代码在运行时会发生 NullPointException 异常。启动程序在手机运行时,可在 Logcat 视图中查看错误语句及原因,如下图所示:
在这里插入图片描述

5.2 使用 Log 日志信息

Android SDK 提供了 Log 类来获取程序运行时的日志信息,该类位于 android.util 命名空间中。Log 类提供了一些方法,用来输出日志信息,如下表所示。
在这里插入图片描述
在这里插入图片描述
开发人员可以使用这些方法输出程序的中间结果,输出的信息可在 Logcat 视图中查看。

5.3 使用断点调试

使用 Logcat 视图输出信息的方式调试程序是非常古老的程序调试方法,而且经常导致程序代码混乱,所以建议使用 Android Studio 内置的 Java 调试器调试 Android 程序。使用 Java 调试器可以设置程序断点,实现程序单步执行,在调试过程中执行查看变量和表达式的值等调试操作。Android 程序与一般的 Java 程序的调试方法基本相同,这里不再赘述。


网站公告

今日签到

点亮在社区的每一天
去签到