本地编译AndroidX源码

104 篇文章 30 订阅

背景


曾经为了把玩Jetpack Compose,下载了AndroidX的源码并在本地编译运行。虽然现在Compose已经发布了独立aar,无需通过编译源码引入工程了,但是如果想了解AndroidX其他库的实现,或者像尝试增加自己的修改时,本地编译还是一个不错的选择,这里整理一下本地编译AndroidX源码的步骤。


下载源码


AndroidX也属于AOSP的一部分。下载AOSP源码需要使用repo。repo是一个脚本工具,可以一次性组合下载多个Git仓库。首先安装repo命令如下:

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

AOSP 中我们只下载AndroidX相关的Git仓库 ,可以通过指定 androidx-master-dev 分支进行下载

$ mkdir androidx-master-dev && cd androidx-master-dev
$ repo init -u https://android.googlesource.com/platform/manifest \
            -b androidx-master-dev
$ repo sync -c -j9

打开工程


AndroidX 的开发调试需要使用Android Studio。 为了避免源码与开发者手头的AS版本不兼容,下载的源码中自带了配套的AS,可以通过cmd启动:

$ cd androidx-master-dev/frameworks/support
$ ./studiow

需要注意Jetpack Compose 相对于其他组件,需要特别版本的AS才能运行,路径如下:

$ cd androidx-master-dev/frameworks/support/ui
$ ./studiow

运行demo


AndroidX 项目中包含几个Demo的APP,便于开发者和学习者进行一些参考和调试。

  • support-v4-demos
  • support-v7-demos
  • support-transition-demos
  • support-emoji-demos

  • 可以使用Android Studio编译运行,也可以直接用gradle命令运行
# build
$ ./gradlew assembleDebug

# test
$ ./gradlew support-transition:connectedCheck

提交PR


如果发现了AndroidX的bug,可以基于AndroidX主线拉一个分支,修改并经过Demo/Test验证后,向AOSP提交PR(Pull Reauest),在AOSP中一般被称为CL(Change List):

$ cd frameworks/support

# 切分支,repo start 其实是 git checkout -b 的封装
$ repo start my-change .

# 本地修改,调试,测试

# git commit
$ git add .
$ git commit

# 提交Gerrit review 
$ repo upload .

# review结果修正后,追加comment 重新上传
$ git add .
$ git commit --amend
$ repo upload .

提交的comment message有一定要求,一般会自动添加 Change-id: 行,此行不能删除。
另外,需要在Change-Id上面追加测试情况 Test: {Test Class名等}
AOSP的bug会使用 issuetracker 进行管理,如果修复了issuetracker的bug,还需要追加Bug:{BugID}


本地Marven


除了本地基于源码调试以外,也可以将工程打包成本地aar使用,通过以下gradle命令发布到本地maven仓库

cd frameworks/support
./gradlew publishMavenPublicationToMavenLocal

执行后,可以在以下位置看到androidx的目录

$ ls ~/.m2/repository/androidx/
activity              benchmark             contentpager ....

可以确认当前androidx版本:

$ ls ~/.m2/repository/androidx/work/work-runtime-ktx/
2.3.0-rc01

在项目中配置本地marven库:

allprojects {
    repositories {
        google()
        jcenter()
        mavenLocal() // 追加本地仓库依赖
    }
}

然后在module中的dependencies中就可以依赖本地marven中的支持的AndroidX版本了

implementation 'androidx.work:work-runtime-ktx:2.3.0-rc01'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fundroid

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

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

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

打赏作者

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

抵扣说明:

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

余额充值