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组,则不会自动下载,搞不懂

posted @ 2022-05-14 17:18  世间很大  阅读(1432)  评论(0编辑  收藏  举报