aosp编译刷机过程小结
2016-07-08 22:30
267 查看
前言
今天把aosp的代码编译并且刷机,然后导入到AS中,历经波折,总算搞定,遇到一系列问题,在此小结一下。本机配置如下:
1、mac版本
OSX Yosimite 10.10.5 (14F27)
2、java版本
1.7.0_79
3、xcode
Version 7.0 (7A220)
4、手机
nexus 5x
下载代码
1、建立大小写敏感的磁盘镜像mac默认磁盘是大小写不敏感的,所以得创建个大小写敏感的磁盘
我一开始使用的方法是 “应用程序 / 实用工具 / 磁盘工具,点新建映像”,但是老是提示“权限不足”,其实我已经是管理员了,不知道怎么回事。
后来我使用命令行来创建,我给了120g的磁盘空间,最后大约用调了90个G,真TM大
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 120g ~/android.dmg创建好了磁盘,用spot查一下android.dmg,看看在哪里?哦,在fish目录下,~代表的就是/Users/fish这个位置。
然后把磁盘挂载起来,ok,磁盘有了
2、下载代码
我的手机是nexus 5x,查了下 android-6.0.1_r45版本可以刷。
要看手机可以刷哪个版本可以看这儿https://source.android.com/source/build-numbers.html#source-code-tags-and-builds
我是5x,所以选择r45这个branch。
好了,可以开始下载了。
//1、切换到刚才创建的磁盘 $ cd /Volumes/untitled //2、安装repo,这里要保证bin目录的存在,如果不存在那就mkdir一下 $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo //3、输入google账号密码 $ git config --global user.name "F chefish" $ git config --global user.email "我的密码" //4、创建文件夹 $ mkdir WORKING_DIRECTORY $ cd WORKING_DIRECTORY //下载,这里与官方不太一样,因为我没有配置环境变量 $ /Users/fish/bin/repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r45 $ /Users/fish/bin/repo sync
下代码很简单,有个好的 网络就好了,我大约下载了7个小时
编译
$ source build/envsetup.sh $ lunch //lunch之后,要选择,lunch的对象,我是5x,所以选择,userdebug-bullhead这个版本 $ make -j4我第一次跟着官方文档,傻乎乎的选择了aosp_arm-eng版本,这其实是给模拟器用的。
编译大约2个小时
刷机
连上手机//进入fastboot模式 $ adb reboot bootloader //解锁(如已经解锁就没必要了) $ fastboot oem unlock oem //刷机(会有个界面一直显示android字,不要慌,过一会就好了) $ fastboot flashall -w
刷机大约5分钟
导入AS
$ mmm development/tools/idegen/ $ sh ./development/tools/idegen/idegen.sh第一行是,生成IDE工具文件,运行完将生成idegen.jar文件
第二行是,生成Android Studio配置文件,主要是生成android.iws, android.ipr, android.iml,这三个文件是Android
Studio项目的关键文件,主要就是列出项目由模块组成,依赖关系,目录结构。
然后打开Android Studio,File->Open->工程根目录android.ipr,Android会自动导入工程所有代码,进行index,大约要40分钟
开启调试
1,要创建一个java module,如下图所示2,配置sdk,打开File-Project Structure,SDKs,可以看到里面有1.8,Android API 23 Platform,Android 6.0 Google API。选择Android API 23 Platform,这个时候Classpath下应该有android.jar,要把他删掉(他会影响我们的代码调试)。res可以不用删。如下图所示。
3、此时看下 attach to process那个按钮是否存在,如果不存在,就关闭AS,再打开一遍,会提示“framework code detected”,点进去配置下,好像是加了个manifest。
然后attach to process那个按钮就会出来了。
4、/Volumes/untitled/WORKING_DIRECTORY/external/robolectric/v1/lib/main找到类似android-all-4.1.2_r1-robolectric-0.jar的文件(6个),打包压缩,然后删除6个jar。
5、大功告成了!GXGX,BGBG
编译前驱动程序需要吗
一般来说编译前要加入和手机相关的驱动程序,但是5x不需要,可以查下面的网页,可以看到没有5x,https://developers.google.com/android/nexus/drivers
编译时执行lunch命令的时候,弹出Can not find SDK 10.6错误
具体的错误如下所示:myhost:android-4.4.4_r2.0.1 carl$ lunch aosp_x86-engbuild/core/combo/HOST_darwin-x86.mk:65:*****************************************************build/core/combo/HOST_darwin-x86.mk:66: * Can not find SDK 10.6
at/Developer/SDKs/MacOSX10.6.sdk build/core/combo/HOST_darwin-x86.mk:67:*****************************************************build/core/combo/HOST_darwin-x86.mk:68:*** Stop.. Stop.
具体错误的原因是,在编译脚本中会检查当前的Xcode sdk的版本是否是兼容的,这可能是因为你mac上的xcode版本比较新,在Android源代码中还没有添加上.理论上说应该用Android代码对应的XcodeSDK版本来编译,不然可能会有兼容性的问题。
具体的方法如下所示:
你可以到Xcode的sdk路径下(/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs)查看当前系统的SDK版本是多少。比如我的SDK版本是MacOSX10.11.sdk,接下来编辑build/core/combo/mac_version.mk中的mac_sdk_versions_supported所在的行添加10.11就行了。在运行下lunch命令,是不是就好了。
编译问题 无法访问RemoteControlClient
具体错误如下out/target/common/obj/JAVA_LIBRARIES/android-support-v4-api23_intermediates/classes.jar
target Static Jar: android-support-v4-api23(out/target/common/obj/JAVA_LIBRARIES/android-support-v4-api23_intermediates/javalib.jar)
target Java: android-support-v4(out/target/common/obj/JAVA_LIBRARIES/android-support-v4_intermediates/classes)
frameworks/support/v4/java/android/support/v4/media/TransportMediator.java:190:错误: 无法访问RemoteControlClient
return mController != null ?mController.getRemoteControlClient() : null;
^
找不到android.media.RemoteControlClient的类文件
frameworks/support/v4/java/android/support/v4/media/TransportMediator.java:240:错误: 无法访问OnPlaybackPositionUpdateListener
mController.refreshState(mCallbacks.onIsPlaying(),
^
找不到android.media.RemoteControlClient$OnPlaybackPositionUpdateListener的类文件
暂时不知道什么原因
解决方法:删除代码,重新下载,(woca)。
参考文献
https://source.android.com/source/building.htmlhttp://www.liball.me/mac-10-10-build-android-4-4-4-for-nexus/ http://blog.csdn.net/zhongwcool/article/details/46922175 http://stackoverflow.com/questions/29315961/aosp-compiled-image-for-nexus-9-doesnt-boot
http://www.cnblogs.com/kissazi2/p/5244438.html
相关文章推荐
- XMPP 学习笔记一 OpenFire与Spark安装
- POJ 2251 Dungeon Master
- Android-常见问题解决方案
- cmath module(针对复数)
- 【训练题】拓扑排序
- Android(让你的安卓模拟器链接网络)
- Mac上使用Visual Studio Code开发/调试.NET Core代码
- html5+css 两列布局
- Android之SD卡 模拟器中SD卡的创建和文件导入导出
- MongoDB增删查改
- Fedora failed to start from copied Virtualbox image - Fstab problem
- 二叉树四种遍历方式
- Python的优缺点
- Openlayers3学习(一)
- js函数和数组
- make_heap 源码剖析
- Angular入门
- [Python学习笔记]2——Python使用函数
- 用ndk-build 工具手动生成编译android原生程序
- HDU2888 Check Corners