背景


曾经为了把玩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'

本地编译AndroidX源码相关推荐

  1. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  2. build怎么调试 react_GitHub - bozhouyongqi/debug-react: 本地调试react源码环境

    [TOC] 工欲善其事,必先利其器. 在学习raect源码时,如果能够在浏览器中单步调试,势必会加深理解.其实可以借助webpack的resolve.alias将react等指向本地的目录,这样就不会 ...

  3. 获取并编译linux源码,android获取源代码、编译、命令

    ---my--- 正确的编译android sdk: cd myandroid . ./build/envsetup.sh lunch sdk-eng make sdk //或者: make PROD ...

  4. 《深入解析Android 虚拟机》——第1章,第1.3节编译Android源码

    本节书摘来自异步社区<深入解析Android 虚拟机>一书中的第1章,第1.3节编译Android源码,作者 钟世礼,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  5. 从零开始,手把手教你如何在Ubuntu下编译VLC-Android源码

    前言 公司项目中使用的libvlcjni.so库文件,有点老,对Android 6.0+系统兼容性太差了,当程序运行在Android6.0+系统上时,回弹出警告框,提示libvlcjni.so:tex ...

  6. 关于微信小程序反编译获取源码

    记录一下微信小程序如果反编译获取源码 需要用到的工具: 1.获取root权限的安卓手机,或者直接用模拟器(推荐用网易mumu模拟器,不推荐用夜神) mumu模拟器下载地址:   http://mumu ...

  7. Ubuntu 编译jdk源码

    Ubuntu 编译jdk源码 一 下载需要的依赖文件 sudo apt-get install libfreetype6-dev sudo apt-get install libcups2-dev s ...

  8. android:自己动手编译Android源码(超详细)

    自己动手编译Android源码(超详细) 涅槃1992 2016.06.20 02:12* 字数 4330 阅读 86819评论 89喜欢 339赞赏 7 在Android Studio代码调试一文中 ...

  9. Android 编译IJKPlayer源码

    1. 背景 目前在做音视频相关的工作,在项目中用到了播放相关的问题,使用的框架是GSYVideoPlayer,使用它的原因是可以很方便的切换播放器内核,系统内核.IJKPlayer内核亦或是exo2P ...

  10. Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27

    文章目录 一. 前言 二.系列文章 三. 服务器配置 3.1 Repo 工具配置 3.2 AOSP 依赖配置 四. 下载源码 4.1 下载 aosp tar ball 4.2 同步代码 4.3 切分支 ...

最新文章

  1. 实现Java Socket 客户端服务端交互实例
  2. Arduino--LCD1602(4bit)
  3. android Formatter 的使用
  4. Exceptionless 5.0.0本地Docker快速部署介绍
  5. 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
  6. 跳出所有循环的语句_从零开始的Java之旅2.0 流程控制语句
  7. 自定义键盘组件_WEB组件终极开发手册:让玩家没了鼠标也能操作
  8. 百度NLP模块使用手册——深度直击最新进展
  9. 岛主 同学给我出的算法题
  10. python DEA: 非径向距离函数(non-radial directional distance function)
  11. 为什么都说阿里 P7 的晋升是道坎?
  12. php md5 file算法原理,MD5算法原理与实现
  13. 初学Python案例之一(开平方代码)
  14. TPS和事务响应时间的关系、计算公式(转载)
  15. html5子代选择器,伪类、子代、毗邻选择器 — IE6已逝,这些优秀的选择器你怎能不用?...
  16. 知识付费的本质和未来
  17. UVA1595(对称轴)
  18. 降低语速是需求评审最有价值的技巧
  19. 2018便利蜂春招一面
  20. python获取select选中的值_Python3.x:遍历select下拉框获取value值

热门文章

  1. UG软件制图的几个重要技巧,你知道吗?
  2. selenium + python环境搭建步骤
  3. 图神经网络之Node2Vec详解
  4. 无线通信与编码_MATLAB实现Turbo码的仿真_含仿真代码_Dr.WuYufei
  5. Oracle索引类型-参考
  6. 使用PMSM控制的puma560机械臂简单轨迹跟踪
  7. 打开要素类错误.几何形状数量与表的纪录数不匹配
  8. 【leetcode】力扣算法:杨辉三角 java语言解题
  9. 怎么批量打印html,Word如何批量打印
  10. 前端学习笔记 - 移动端Web开发