AndroidX(/frameworks/support) 代码下载与编译
什么是 AndroidX
android 支持库,提供对不同 android 版本的兼容接口。
以下为 android 开发者网站上的说明:
1 2 3 4 5 6 7 8 9 10 11 |
androidx 命名空间包含 Android Jetpack 库。与支持库一样,androidx 命名空间中的库与 Android 平台分开提供,并向后兼容各个 Android 版本。 AndroidX 是对原始 Android 支持库进行了重大改进,后者现在已不再维护。androidx 软件包完全取代了支持库,不仅提供与支持库同等的功能,而且还提供了新的库。 此外,AndroidX 还包括以下功能: AndroidX 中的所有软件包都使用一致的命名空间,以字符串 androidx 开头。支持库软件包已映射到对应的 androidx.* 软件包。如需获取所有旧类到新类以及旧构建工件到新构建工件的完整映射,请参阅软件包重构页面。 与支持库不同,androidx 软件包会单独维护和更新。从版本 1.0.0 开始,androidx 软件包使用严格的语义版本控制。您可以单独更新项目中的各个 AndroidX 库。 版本 28.0.0 是支持库的最后一个版本。我们将不再发布 android.support 库版本。 所有新功能都将在 androidx 命名空间中开发。 |
AndroidX 支持库的 mvnrepository 仓库
https://mvnrepository.com/artifact/androidx
可通过上面的网址查看和下载历史发布版本,需要自己编译历史版本,可以参考发布时间,拉取新的分支。
下载 androidX 源码
aosp 的 /frameworks/support 仓库即 androidX 支持库源码位置,但是这个仓库中没有编译环境,所以只有这个仓库是无法编译的。
网上没有找到编译方法,偶然打开 googlesource 的 manifest 仓库网页,看到里面有 androidx-main 分支,尝试使用 repo 拉取这个分支,最终才发现下载完整编译环境的方式。
google 代码仓库下载位置
1 2 3 |
repo init -u https://android.googlesource.com/platform/manifest -b androidx-main repo sync |
因为源码位置国内不可以访问,可以使用清华大学镜像站进行下载。
使用清华大学镜像站进行下载
将下载地址替换为镜像站的网址。
1 2 3 4 5 |
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b androidx-main 如果遇到 curl 证书校验失败问题,将 https 改为 http repo init -u http://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b androidx-main repo sync |
下载所需空间
manifest 配置文件中,指定了 clone-depth="1",所以 repo sync 后只会下载最后一次 commit 的文件状态。
1 |
<project path="tools/external/gradle" name="platform/tools/external/gradle" clone-depth="1" /> |
这种方式下载后占用空间在 24G 左右。
下载全量代码所需空间
上面下载的的代码是最新的提交状态,编译出的 aar 是最新版本。
如果需要调试旧版本的 androidX 支持库,则需要切换代码到旧版本所在的 commit,此时需要使用 git pull 拉取全部代码。
以下 git 仓库占用空间大。
1 2 3 |
platform/prebuilts/androidx/external platform/prebuilts/androidx/internal platform/tools/external/gradle //此仓库可以不更新,按照报错信息下载(https://services.gradle.org/distributions)对应的 gradle 版本放到这个仓库里 |
全部下载在 200G 以上,建议硬盘预留 300G 空间。
文件结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
├── build │ └── make ├── external │ ├── abseil-cpp │ ├── dexter │ ├── dokka │ ├── google-benchmark │ ├── icing │ ├── icu │ ├── ink-stroke-modeler │ ├── libyuv │ ├── noto-fonts │ ├── protobuf │ └── webview_support_interfaces ├── frameworks │ └── support ├── golden │ ├── compose │ ├── emoji2 │ ├── glance │ └── wear ├── out │ ├── androidx │ ├── buildSrc │ ├── dist │ └── gradle-project-cache ├── prebuilts │ ├── androidx │ ├── build-tools │ ├── checkstyle │ ├── fullsdk-darwin │ ├── fullsdk-linux │ ├── jdk │ └── protobuf ├── repo └── tools ├── external ├── fetch_artifact ├── metalava └── repohooks |
编译
使用 gradle 进行构建。对应的 gradlew 可执行文件位于 support 文件夹内。
以下,以编译 frameworks/support/camera/camera-camera2 为例。
1.0 使用 gradlew tasks –all 查看所有任务
1 2 3 4 5 6 7 8 9 10 11 12 |
camera:camera-camera2:updateLintBaseline - Updates the lint baseline using the default variant. camera:camera-camera2:updateLintBaselineDebug - Update the lint baseline using the debug variant camera:camera-camera2:updateLintBaselineRelease - Update the lint baseline using the release variant camera:camera-camera2:verifyDependencyVersions - Task for verifying the androidx dependency-stability-suffix rule camera:camera-camera2:analyzeDebugAndroidTestDependencies camera:camera-camera2:analyzeDebugDependencies camera:camera-camera2:analyzeDebugUnitTestDependencies camera:camera-camera2:analyzeReleaseDependencies camera:camera-camera2:assembleDebug - Assembles main output for variant debug camera:camera-camera2:assembleDebugAndroidTest - Assembles main output for variant debugAndroidTest camera:camera-camera2:assembleDebugUnitTest - Assembles main output for variant debugUnitTest camera:camera-camera2:assembleRelease - Assembles main output for variant release |
打包 aar 文件,关注 assembleDebug assembleRelease 这两个就可以了。assembleDebug 是 debug 版本, assembleRelease 是 release 版本。
1 2 |
camera:camera-camera2:assembleDebug camera:camera-camera2:assembleRelease |
2.0 编译指定 task
1 2 |
./gradlew camera:camera-camera2:assembleDebug ./gradlew camera:camera-camera2:assembleRelease |
这一步如果没有生成物,且输出以下日志。
1 2 3 4 5 6 7 8 9 10 11 |
./gradlew camera:camera-camera2:assembleDebug Configuration cache is an incubating feature. Configuration on demand is an incubating feature. Reusing configuration cache. BUILD SUCCESSFUL in 1s 40 actionable tasks: 40 up-to-date A build scan was not published as you have not authenticated with server 'ge.androidx.dev'. For more information, please see https://gradle.com/help/gradle-authenticating-with-gradle-enterprise. Configuration cache entry reused. |
就执行一次 ./gradlew build –scan 后再执行上面的指令
3.0 生成的 aar 位置
./out/androidx/camera/camera-camera2/build/outputs/aar
0 Comments