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的更多相关文章

  1. Android:源码环境编译自定义的APP到ROM(System Image)中

    有时候我们需要在源码环境中增加自己的应用或模块,随ROM一起发布. 下面讲述相关步骤: 1. 首先可以在SDK环境下进行编码设计(如果你的APP不涉及到emulator无法模拟的硬件的话) 也可以参考 ...

  2. android源码环境下用mmm/mm编译模块,输出编译log到文件的方法

    android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...

  3. 在android源码环境下写上层应用的一个初步解决方法

    在android源码环境下编写上层应用,一直以来我都觉得很麻烦.因为如果单纯将应用导入eclipse,那么framework层一些定制的API无法自动提示和补全,使用起来不太方便:如果将整个andro ...

  4. Android:源码环境下移植第三方的apk内置到ROM(System Image)中

    1. 首先在vendor目录下新建一个the3rdapk的目录,将需要内置的apk丢进去,目录名自己随意定. 2. 在 build/target/product/common.mk最后面,在$(cal ...

  5. 【转】Ubuntu10.04上编译Android源码(Build Android source in Ubuntu10.04 Platform)

    原文网址:http://blog.csdn.net/chenyafei617/article/details/6570928 一.Introduction 今天我们就来谈谈如何在Ubuntu平台上面编 ...

  6. 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% ...

  7. Android源码分析一 Android系统架构

    一 Android系统架构 Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动.音频驱动.照相机驱动 ...

  8. Eclipse与Android源码中ProGuard工具的使用

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

  9. Android源码-学习随笔

    在线代码网站1:http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 书籍: ...

随机推荐

  1. 顺利通过EMC实验(11)

  2. windows本地搭建easy-mock环境

    起因:由于easy-mock官网很不稳定,所以想搭建自己本地的mock环境 1.首先安装node.js 环境 (提供地址:https://nodejs.org/en/) 2.下载mongoDB 地址( ...

  3. jQuery Validate多实例讲解

    规则 描述 required:true 必须输入的字段. remote:"check.php" 使用 ajax 方法调用 check.php 验证输入值. email:true 必 ...

  4. call、apply和 bind的简单使用方法

    - call.apply:在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. J ...

  5. DRF 视图组件

    目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的"七十二变" 第一层:基于APIview的五个 ...

  6. 将项目导入eclipse中出现的jsp页面报错

    图片摘自百度经验,实在是每次都会忘了步骤,每次都得重新百度,所以索性自己总结到博客中,下次如果还记不住就直接从博客中看.原谅我实在学渣,呜呜~~~~(>_<)~~~~

  7. java集合总览

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  8. uni-app开发的h5 访问url自动添加 #的问题

    在manifest.json配置文件修改h5的内容,添加router部分 "h5" : { "title" : "xxx", "d ...

  9. Windows和ubuntu下更改pip国内镜像

    windows下更改pip国内镜像 # 在C:\Users\admin路径下创建pip文件夹,然后创建pip.ini文件, 并在文件下写入 [global] index-url = http://py ...

  10. el-tree小知识点

    <el-tree ref="tree" :props="props" :data="initData" node-key=" ...