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. Altium_Designer PCB文件的绘制(上:PCB基础和布局)

    PCB设计基础知识 PCB面板 在PCB设计中,最重要的一个面板就是"PCB面板".该面板的功能主要是对电路板中的各个对象进行精确定位,并以特定的效果显示出来.该面板还可以对各种对 ...

  2. jQ模拟打字效果插件typetype

    typetype是一个jquery插件,可以模拟人类的打字效果. 效果图如下所示: 查看演示 http://weber.pub/demo/160828/jQuery.Type/jQuery.type. ...

  3. Linux 0.11源码阅读笔记-总览

    Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理.内存管理等主要模块知识. 通过阅读教复杂的代码,锻炼自己复杂项目代 ...

  4. 人机交互BS

    B/S结构用户界面设计       [实验编号] 10003809548j Web界面设计 [实验学时] 8学时 [实验环境] l  所需硬件环境为微机: l  所需软件环境为dreamweaver ...

  5. Python入门-import导入模块功能

    1.啥是模块 模块(module):用来实现或者多个功能的Python代码,(包含变量.函数.类),本质就是*.py后缀文件. 包(package):定义了一个由模块和子包组成的Python应用程序执 ...

  6. Alibaba Java诊断工具Arthas查看Dubbo动态代理类

    原创/朱季谦 阅读Dubbo源码过程中,会发现,Dubbo消费端在做远程调用时,默认通过 Javassist 框架为服务接口生成动态代理类,接着再去调用代理类实现远程接口调用.在阅读这部分源码时,最后 ...

  7. 记录:替换线上springboot项目可执行jar包中依赖jar里的class文件

    问题背景: 项目组发现线上版本问题后,定位是由于项目依赖的某个jar包中有个小BUG. 解决方案: 在修改了对应的java文件后,编译出对应的class文件.从生产环境下载项目jar包,解压后,找到对 ...

  8. addEventListener() 和 removeEventListener() 简介

    DOM方法  addEventListener()  和  removeEventListener()  是用来分配和删除事件的函数   这两个方法都需要三个参数  分别为: 事件名称(String) ...

  9. C语言基础部分练习(http://acm.hgnu.edu.cn)

    前言 最近有朋友和同学找我要c语言基础练习答案,为了方便分享,放在我的博客上了,如果对你确实有帮助,可以考虑点下赞或打赏哦(都能通过,没有专注于搞算法,所以有的地方可以优化,欢迎在评论区留言) A. ...

  10. android软件简约记账app开发day03-自定义键盘的书写

    android软件简约记账app开发day03-自定义键盘的书写 我们在fragment界面使用了自定义的keybroad键盘,所以今天我们来书写自定义的键盘代码 新建util包,新建keyboard ...