原生Android_APP目录结构分析

1 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-layoutandroidx.constraintlayout:constraintlayout:1.1.2
com.android.support:appcompat-v7androidx.appcompat:appcompat:1.0.0
com.android.support:cardview-v7androidx.cardview:cardview:1.0.0
com.android.support:coordinatorlayoutandroidx.coordinatorlayout:coordinatorlayout:1.0.0
com.android.support:designcom.google.android.material:material:1.0.0-rc01
com.android.support:drawerlayoutandroidx.drawerlayout:drawerlayout:1.0.0
com.android.support:gridlayout-v7androidx.gridlayout:gridlayout:1.0.0
com.android.support:media2androidx.media2:media2:1.0.0-alpha03
com.android.support:multidexandroidx.multidex:multidex:2.0.0
com.android.support:percentandroidx.percentlayout:percentlayout:1.0.0
com.android.support:recyclerview-v7androidx.recyclerview:recyclerview:1.0.0
com.android.support:support-annotationsandroidx.annotation:annotation:1.0.0
com.android.support:support-compatandroidx.core:core:1.0.0
com.android.support:support-fragmentandroidx.fragment:fragment:1.0.0
com.android.support:support-v4androidx.legacy:legacy-support-v4:1.0.0
com.android.support:viewpagerandroidx.viewpager:viewpager:1.0.0
com.android.support:swiperefreshlayoutandroidx.swiperefreshlayout:swiperefreshlayout:1.0.0

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

2.常见类映射

支持库类AndroidX 类
android.arch.lifecycle.Lifecycleandroidx.lifecycle.Lifecycle
android.support.v4.app.Fragmentandroidx.fragment.app.Fragment
android.support.v4.app.FragmentActivityandroidx.fragment.app.FragmentActivity
android.support.v7.app.AppCompatActivityandroidx.appcompat.app.AppCompatActivity
android.support.v7.app.ActionBarandroidx.appcompat.app.ActionBar
android.support.v7.widget.RecyclerViewandroidx.recyclerview.widget.RecyclerView
android.support.design.card.MaterialCardViewcom.google.android.material.card.MaterialCardView
android.support.design.ripple.RippleUtilscom.google.android.material.ripple.RippleUtils
android.support.design.widget.CoordinatorLayoutandroidx.coordinatorlayout.widget.CoordinatorLayout
android.support.design.widget.NavigationViewcom.google.android.material.navigation.NavigationView
android.support.percent.PercentFrameLayoutandroidx.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及更高版本中。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小P聊技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值