Android源码环境生成Android SDK并导入Adnroid Studio
1、发现问题
之前使用Repo同步Android源码使用的是下面这条指令,即同步的是分支android-7.1.2_r18的代码
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-7.1.2_r18
然后使用下面的命令编译SDK,发现刚执行make sdk指令就结束编译了,这样显然是不对的,正常编译sdk至少也得半小时吧。
source build/envsetup.sh
lunch sdk-eng
make sdk
2、解决方案
于是进入源码的sdk目录,发现里面有个README.txt,有相关介绍。
Some of the SDK tools sources have moved out of the sdk.git project.
They are no longer found here.
Instead they can be found in the tools/base.git and the tools/swt.git projects.
If you need to view/change the source and lack these folders, you can bring
them by using a repo init command such as:
$ repo init -u https://android.googlesource.com/platform/manifest -g all,-notdefault,tools
$ repo sync [-j N]
The libraries that are sourced in tools/base and tools/swt are converted to
prebuilts which are located in prebuilts/devtools. These prebuilts are the
ones being used when doing a "make sdk".
意思大概就是生成SDK中那些工具的源码已经被移除了,好家伙压根没编译,怪不得这么快呢,你要执行上面的命令重新拉取,于是按照提示执行:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-7.1.2_r18 -g all,-notdefault,tools
repo sync
这里将地址换成清华的了,下载的更快点。
3、编译SDK
同步完成,就会发现sdk目录多了很多东西。然后就是编译SDK
3.1、编译Linux用的SDK
. build/envsetup.sh
lunch sdk-eng
make sdk
生成目录在:out/host/linux-x86/sdk/sdk/
3.2、编译Windows用的SDK
注意:编译Windows上的SDK前要先编译Linux上的SDK
sudo apt-get install tofrodos //先安装一个工具
build/envsetup.sh
lunch sdk-eng
make win_sdk
生成目录在out/host/windows/sdk/sdk
4、将SDK导入Android Studio
4.1、进入out/host/windows/sdk/sdk目录,

4.2、将android-sdk_eng.root_windows.zip拷贝到物理机(windows)并解压

4.3、创建Android Studio项目

可以看到现在使用的是默认的Android Studio下载的SDK,我们要将其换成刚刚编译的SDK,

不出意外,Android Studio报错了

修改app下面的build.gradle,SDK是基于7.1.2源码编译的,7.1对应API 25,所以compileSdkVersion和targetSdkVersion都改为25,buildToolsVersion就不改了,它和Gradle和Gradle Plugin版本挂钩,一改的话,一堆问题。

修改项目根目录下面的build.gradle,

修改gradle的版本

修改完之后,就看到Android Studio已经识别android.jar了

然后按照提示安装缺失的工具:

再次编译,又报错了,这里怀疑使用了AndroidX和material主题的问题

所以将项目中的AndroidX依赖都换成appcompat依赖
替换依赖,不再使用AndroidX的包

替换继承关系,不再使用AndroidX的AppcompatActivity

替换布局文件内容,不再使用AndroidX的ConstraintLayout

修改主题的继承关系,不再继承Material主题

最重要的是注释这两条属性,不然AndroidX的依赖依旧存在

修改完成再次编译,可算成功了,Run到手机上

不过下次更改系统接口,得到我们更改过接口的SDK,就可以利用它来开发App了。
最后,留个问题,repo init -g用来指定Project所属的组,为什么指定-g all, -notdefault,tools这三个组就把编译SDK所需要的源码下载下来了呢?
repo init -u https://android.googlesource.com/platform/manifest -g all,-notdefault,tools
跟文档解释不一致啊,文档说把Project放到notdefault组,则不会自动下载,搞不懂

Android源码环境生成Android SDK并导入Adnroid Studio的更多相关文章
- Android:源码环境编译自定义的APP到ROM(System Image)中
有时候我们需要在源码环境中增加自己的应用或模块,随ROM一起发布. 下面讲述相关步骤: 1. 首先可以在SDK环境下进行编码设计(如果你的APP不涉及到emulator无法模拟的硬件的话) 也可以参考 ...
- android源码环境下用mmm/mm编译模块,输出编译log到文件的方法
android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...
- 在android源码环境下写上层应用的一个初步解决方法
在android源码环境下编写上层应用,一直以来我都觉得很麻烦.因为如果单纯将应用导入eclipse,那么framework层一些定制的API无法自动提示和补全,使用起来不太方便:如果将整个andro ...
- Android:源码环境下移植第三方的apk内置到ROM(System Image)中
1. 首先在vendor目录下新建一个the3rdapk的目录,将需要内置的apk丢进去,目录名自己随意定. 2. 在 build/target/product/common.mk最后面,在$(cal ...
- 【转】Ubuntu10.04上编译Android源码(Build Android source in Ubuntu10.04 Platform)
原文网址:http://blog.csdn.net/chenyafei617/article/details/6570928 一.Introduction 今天我们就来谈谈如何在Ubuntu平台上面编 ...
- Android源码的下载、编译与导入到Android Studio【转】
本文转载自:http://wl9739.github.io/2016/05/09/Android%E6%BA%90%E7%A0%81%E7%9A%84%E4%B8%8B%E8%BD%BD%E3%80% ...
- Android源码分析一 Android系统架构
一 Android系统架构 Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动.音频驱动.照相机驱动 ...
- Eclipse与Android源码中ProGuard工具的使用
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
- Android源码-学习随笔
在线代码网站1:http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 书籍: ...
随机推荐
- web入门+书籍推荐
如果你想建立一个自己的网站,你可以从网上搜到许多的教程:比如 wordpress gitpages 等等. 如果你想了解这个框架是怎么工作的,你可以了解以下下面的三个基本概念: 服务器, 数据库, 前 ...
- 王下邀月熊_Chevalier的前端每周清单系列文章索引
感谢 王下邀月熊_Chevalier 分享的前端每周清单,为方便大家阅读,特整理一份索引. 王下邀月熊大大也于 2018 年 3 月 31 日整理了自己的前端每周清单系列,并以年/月为单位进行分类,具 ...
- c++实现状态模式
实验:用Java代码模拟实现课堂上的"银行账户"的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化. 由于是c++,不像java那么灵活,所以类的调用方 ...
- potoshop cs6安装配置16错误解决办法(win10系统)
问题截图如下: 解决方法: 右击图标选择属性:选择兼容性-->兼容模式-->以管理员身份运行-->应用 然后就可以打开了!
- vue中Promise对象用法
Promise.all([ 需要异步一起执行的方法---------先做的事 ]).then(res=>{ 后做的事(先做的事已经做好了) }) 举栗子: Promise.all([ this. ...
- apache开启图片缓存压缩
①-浏览器缓存图片信息 开启Apache的expires模块,重启Apache 2.在虚拟主机的配置文件里面,增加对图片信息缓存的配置,重启Apache 3.在网站目录里面填写测试代码 4.测试效果 ...
- Java 实例 - 读取文件内容
原文作者:菜鸟教程 原文链接:Java 实例 - 读取文件内容(建议前往原文以获得最佳体验) 按行读取文本文件 import java.io.*; public class Main { public ...
- Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?
原始数据存储在 DB 中(如 MySQL.Hbase 等),但 DB 的读写性能低.延迟高. 比如 MySQL 在 4 核 8G 上的 TPS = 5000,QPS = 10000 左右,读写平均耗时 ...
- shell、bash和sh区别
shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序.你在提示符下输入的每个命令都由shell先解释然后传给Linux内核. shell 是一个命令语言解释器(co ...
- 如何在代码层面提供CPU分支预测效率
关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~ https://www.zhihu.com/question/486239354/answer/2410692045 ...