本地编译AndroidX源码
背景
曾经为了把玩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源码相关推荐
- java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...
- build怎么调试 react_GitHub - bozhouyongqi/debug-react: 本地调试react源码环境
[TOC] 工欲善其事,必先利其器. 在学习raect源码时,如果能够在浏览器中单步调试,势必会加深理解.其实可以借助webpack的resolve.alias将react等指向本地的目录,这样就不会 ...
- 获取并编译linux源码,android获取源代码、编译、命令
---my--- 正确的编译android sdk: cd myandroid . ./build/envsetup.sh lunch sdk-eng make sdk //或者: make PROD ...
- 《深入解析Android 虚拟机》——第1章,第1.3节编译Android源码
本节书摘来自异步社区<深入解析Android 虚拟机>一书中的第1章,第1.3节编译Android源码,作者 钟世礼,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- 从零开始,手把手教你如何在Ubuntu下编译VLC-Android源码
前言 公司项目中使用的libvlcjni.so库文件,有点老,对Android 6.0+系统兼容性太差了,当程序运行在Android6.0+系统上时,回弹出警告框,提示libvlcjni.so:tex ...
- 关于微信小程序反编译获取源码
记录一下微信小程序如果反编译获取源码 需要用到的工具: 1.获取root权限的安卓手机,或者直接用模拟器(推荐用网易mumu模拟器,不推荐用夜神) mumu模拟器下载地址: http://mumu ...
- Ubuntu 编译jdk源码
Ubuntu 编译jdk源码 一 下载需要的依赖文件 sudo apt-get install libfreetype6-dev sudo apt-get install libcups2-dev s ...
- android:自己动手编译Android源码(超详细)
自己动手编译Android源码(超详细) 涅槃1992 2016.06.20 02:12* 字数 4330 阅读 86819评论 89喜欢 339赞赏 7 在Android Studio代码调试一文中 ...
- Android 编译IJKPlayer源码
1. 背景 目前在做音视频相关的工作,在项目中用到了播放相关的问题,使用的框架是GSYVideoPlayer,使用它的原因是可以很方便的切换播放器内核,系统内核.IJKPlayer内核亦或是exo2P ...
- 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 切分支 ...
最新文章
- 实现Java Socket 客户端服务端交互实例
- Arduino--LCD1602(4bit)
- android Formatter 的使用
- Exceptionless 5.0.0本地Docker快速部署介绍
- 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
- 跳出所有循环的语句_从零开始的Java之旅2.0 流程控制语句
- 自定义键盘组件_WEB组件终极开发手册:让玩家没了鼠标也能操作
- 百度NLP模块使用手册——深度直击最新进展
- 岛主 同学给我出的算法题
- python DEA: 非径向距离函数(non-radial directional distance function)
- 为什么都说阿里 P7 的晋升是道坎?
- php md5 file算法原理,MD5算法原理与实现
- 初学Python案例之一(开平方代码)
- TPS和事务响应时间的关系、计算公式(转载)
- html5子代选择器,伪类、子代、毗邻选择器 — IE6已逝,这些优秀的选择器你怎能不用?...
- 知识付费的本质和未来
- UVA1595(对称轴)
- 降低语速是需求评审最有价值的技巧
- 2018便利蜂春招一面
- python获取select选中的值_Python3.x:遍历select下拉框获取value值