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/ 书籍: ...
随机推荐
- 四、PCB初始化设置
1.参数设置Setup-Design Parameters 2.显示设置 3.颜色设置(自定义) 4..栅格设置(走线层将25分为5等份)
- 顺利通过EMC实验(17)
- Spring Framework远程代码执行漏洞复现(CVE-2022-22965)
1.漏洞描述 漏洞名称 Spring Framework远程代码执行漏洞 公开时间 2022-03-29 更新时间 2022-03-31 CVE编号 CVE-2022-22965 其他编号 QVD-2 ...
- 人机交互大作业--flash嵌入web(纯界面)
界面: 源代码:最近较忙,后续会上传至github
- javascript当中嵌套函数
3)嵌套函数例 3.3.1<head> <meta http-equiv="content-type" content="text/html; c ...
- java栈stack和堆heap的工作原理,用途及区别?举例说明
java堆和栈的区别[新手可忽略不影响继续学习] Java中内存分成两种:一种是栈stack,一种是堆heap.函数中的一些基本类型的变量(int, float)和对象的引用变量(reference) ...
- Java在方法中定义可变参数类型
学习目标: 掌握可变参数的应用 学习内容: 1.定义 在方法中传递数组有一种更简单的方式--方法的可变参数,其本质是一个语法糖,目的是让开发者写代码更简单. 2.语法 [修饰符] 返回值类型 方法名称 ...
- 基于express框架的留言板实现步骤
这个留言板是基于express框架,和ejs模板引擎,首先需要在根目录安装express框架,然后安装ejs模块和body-parser(获取用户表单提交的数据):建立项目目录 message,然后依 ...
- P7683 [COCI2008-2009#5] KRUSKA
洛谷上这道题的第一篇题解.上海加油. 题目大意 Aladdin 已经厌倦了宫殿里的生活.他有一份稳定的工作,他的妻子 Jasmine 和孩子们都在路上,生活变得单调.在这一切的驱使下,他决定在安顿下来 ...
- Linux_文件传输工具_FileZilla
什么是FileZilla? FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能.可控性.有条理的界面和管理多站点的简化方式使得Filezilla客户端版 ...