欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

原生Android_APP目录结构分析

程序员文章站 2022-05-14 18:01:20
...

1 App工程目录

原生Android_APP目录结构分析

 

从结构图中可以看到, 该工程下面有两个目录: 一个是app, 另一个是Gradle Scripts。 其中, app下面又
有3个子目录, 功能说明如下:
(1) manifests子目录, 下面只有一个xml文件, 即AndroidManifest.xml, 是App的运行配置文件。
(2) java子目录, 下面有3个com.example.hellorworld包, 其中第一个包存放的是App工程的java源代
码, 后面两个包存放的是测试用的Java代码。
(3) res子目录, 存放的是App工程的资源文件。 res子目录下又有4个子目录:
drawable目录存放的是图形描述文件与用户图片。
layout目录存放的是App页面的布局文件。
mipmap目录存放的是启动图标。
values目录存放的是一些常量定义文件, 比如字符串常量strings.xml、 像素常量dimens.xml、 颜色常量
colors.xml、 样式风格定义styles.xml等。
Gradle Scripts下面主要是工程的编译配置文件, 主要有:
(1) build.gradle, 该文件分为项目级与模块级两种, 用于描述App工程的编译规则。
(2) proguard-rules.pro, 该文件用于描述java文件的代码混淆规则。
(3) gradle.properties, 该文件用于配置编译工程的命令行参数, 一般无须改动。
(4) settings.gradle, 配置哪些模块在一起编译。 初始内容为include ':app', 表示只编译App模块。
(5) local.properties, 项目的本地配置, 一般无须改动。 该文件是在工程编译时自动生成的, 用于描述
开发者本机的环境配置, 比如SDK的本地路径、 NDK的本地路径等。

2 编译配置文件build.gradle

apply plugin: 'com.android.application'
​
android {
    // 指定编译的SDK版本号 如29表示Android 10 编译
    compileSdkVersion 29
    // 指定编译工具的版本号,这里的头两位数字必须与compileSdkVersion 保持一致,具体的版本号可在sdk安装目录的"sdk\build-tools"下找到
    buildToolsVersion "29.0.2"
    defaultConfig {
        // 指定该模块的应用编号,即App的包名。该参数为自动生成,无需修改
        applicationId "com.example.hellodemo"
        // 指定App适合运行的最小SDK版本号。如16表示至少要在Android4.1上运行
        minSdkVersion 16
        // 指定目标设备的SDK版本号。即该App最希望在哪个版本的Android上运行
        targetSdkVersion 29
        // 指定App的应用版本号
        versionCode 1
        // 指定App的应用版本名称
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            // 指定是否开启代码混淆功能。true表示开启混淆,false表示无需混淆。
            minifyEnabled false
            // 指定代码混淆规则的文件名
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
​
// 指定App编译的依赖信息
dependencies {
    // 指定引用jar包的路径
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    // AndroidX是Google 2018 IO 大会推出的新扩展库  与支持库不同,AndroidX 软件包会单独维护和更新。       androidx 软件包使用严格的语义版本控制,从版本 1.0.0 开始,可以单独更新项目中的 AndroidX 库
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    // 指定单元测试的Junit版本
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
​

3 AndroidX

3.1 Androidx是什么

AndroidX 是 Android 团队用于在 Jetpack 中开发、测试、打包和发布库以及对其进行版本控制的开源项目。[摘自官方]
AndroidX完全取代了支持库,不仅提供同等的功能,而且提供了新的库。
AndroidX 会将原始支持库 API 软件包映射到 androidx 命名空间。只有软件包和 Maven 工件名称发生了变化;类、方法和字段名称没有改变。
与支持库不同,AndroidX 软件包会单独维护和更新。androidx 软件包使用严格的语义版本控制,从版本 1.0.0 开始,可以单独更新项目中的 AndroidX 库。
所有新支持库的开发工作都将在 AndroidX 库中进行,这包括维护原始支持库工件和引入新的 Jetpack 组件。

3.2 AndroidX的变化

1.常见依赖库映射

旧编译工件 AndroidX 编译工件
com.android.support.constraint:constraint-layout androidx.constraintlayout:constraintlayout:1.1.2
com.android.support:appcompat-v7 androidx.appcompat:appcompat:1.0.0
com.android.support:cardview-v7 androidx.cardview:cardview:1.0.0
com.android.support:coordinatorlayout androidx.coordinatorlayout:coordinatorlayout:1.0.0
com.android.support:design com.google.android.material:material:1.0.0-rc01
com.android.support:drawerlayout androidx.drawerlayout:drawerlayout:1.0.0
com.android.support:gridlayout-v7 androidx.gridlayout:gridlayout:1.0.0
com.android.support:media2 androidx.media2:media2:1.0.0-alpha03
com.android.support:multidex androidx.multidex:multidex:2.0.0
com.android.support:percent androidx.percentlayout:percentlayout:1.0.0
com.android.support:recyclerview-v7 androidx.recyclerview:recyclerview:1.0.0
com.android.support:support-annotations androidx.annotation:annotation:1.0.0
com.android.support:support-compat androidx.core:core:1.0.0
com.android.support:support-fragment androidx.fragment:fragment:1.0.0
com.android.support:support-v4 androidx.legacy:legacy-support-v4:1.0.0
com.android.support:viewpager androidx.viewpager:viewpager:1.0.0
com.android.support:swiperefreshlayout androidx.swiperefreshlayout:swiperefreshlayout:1.0.0

更多详细依赖库变化,可查阅官方文档或下载这些映射的 CSV 格式文件。

2.常见类映射

支持库类 AndroidX 类
android.arch.lifecycle.Lifecycle androidx.lifecycle.Lifecycle
android.support.v4.app.Fragment androidx.fragment.app.Fragment
android.support.v4.app.FragmentActivity androidx.fragment.app.FragmentActivity
android.support.v7.app.AppCompatActivity androidx.appcompat.app.AppCompatActivity
android.support.v7.app.ActionBar androidx.appcompat.app.ActionBar
android.support.v7.widget.RecyclerView androidx.recyclerview.widget.RecyclerView
android.support.design.card.MaterialCardView com.google.android.material.card.MaterialCardView
android.support.design.ripple.RippleUtils com.google.android.material.ripple.RippleUtils
android.support.design.widget.CoordinatorLayout androidx.coordinatorlayout.widget.CoordinatorLayout
android.support.design.widget.NavigationView com.google.android.material.navigation.NavigationView
android.support.percent.PercentFrameLayout androidx.percentlayout.widget.PercentFrameLayout

更多详细支持类映射变化,可查阅官方文档或下载这些映射的 CSV 格式文件。

3.3 为什么要迁移AndroidX?

下面是Google官方描述

Existing packages, such as the Android Support Library, are being refactored into AndroidX.
Although Support Library versions 27 and lower are still available on Google Maven,
all new development will be included in only AndroidX versions 1.0.0 and higher.
  • 大致意思是:现有的软件包,如Android支持库,正在被重构为Androidx。尽管在Google Maven上仍然提供支持库版本27及更低版本,但所有新开发将只包含在Androidx 1.0.0及更高版本中。