下载 Android source code(AOSP)遇到的一些问题及解决方法

最近在搞 apk 爆破工程,经常需要调试别人的 apk,每次手动修改 apk 的 debuggable 属性比较麻烦,而且要有时候还不成功。所以还是一劳永逸,下载 AOSP ,把 ro.debuggable 打开,编一个 Nexus 5 的镜像给我手机用。关于 apk 调试的参考链接:https://www.0xaa55.com/technews/201602/00000215.html

建议使用清华镜像,免翻墙。教程链接:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

下面是我在 windows 下,使用cygwin 下载官方 AOSP 时遇到的问题及解决办法:(在 windows 下载主要是为了方便我做别的事情,AOSP 官网上说 repo 只支持 linux 和 mac OS,cygwin 理论上也是支持的,但要填一些坑)

1. repo init 失败,request time out / 404

原因是没有翻墙。我使用的是 Proxifier + shadowsocks ,可以全局翻墙。 或者用普通的 VPN 也可以。网上方法是修改 repo 内容,增加 ss 翻墙配置的;也有修改镜像 url,改成国内的。我在 mac 上试过,部分链接还是被墙,没有成功。

2. 使用 cygwin 的 python 无法运行,报错 no module named site / no module named sysconfig / no module named fcntl;或者是 repo init 时 Get 完第一个之后没有预兆直接退出

这个问题可能是好几个原因造成的。首先,cygwin 是会继承 windows 的环境变量 PATH,所以 cygwin 可能会直接用你 windows 下配置的 python。这会带来几个问题:

  1. 直接输入 python 的 play ground 不能正常显示了(没研究具体原因)

  2. repo init 时提示 Get xxx.bundle 后直接退出。我跟了一下 repo 的代码,是 repo 构造 git clone 命令不对,其路径是 Windows 的路径,而不是 cygwin 的路径。

  3. 运行 repo init 时提示 no module named fcntl。上 google 查了一下,有回答说 Windows 没有 fcntl 这个 python 库。这个回答让我放弃了直接用 windows shell 运行 repo 的想法。(最后发现是存在的,不然 cygwin 也没办法运行 fcntl,因为 cygwin 不是 linux 虚拟机,本质也是 windows 的东西。因为网上说 Windows 没有 fcntl 放弃 windows shell,而尝试 cygwin 运行 repo,也是一个挺蠢的想法)

所以需要切换到 cygwin 的 python 。安装方法可以直接运行 cygwin 的 setup,搜索 python 下载。或使用 apt-cyg (需另外安装,网上有教程)执行 “`apt-cyg install python““。安装完成后还需要把 cygwin 的 $PATH 变量修改一下,把 windows 下的 python 路径剔除掉(我这里是 /cygdriver/d/Python27),否则还是会优先使用 Windows 下的 python。修改方法直接在 .bashrc 或 .bash_profile 下改就可以了。切换过来后,后还可能出现问题:

  1. 运行 python 报错 no module named site / no module named sysconfig

原因是 python 包路径错了,你可以输入 “import sys(回车)print sys.path “看一下。我这里就是莫名其妙多了当前目录的路径前缀。

解决办法是为cygwin 设置正确的路径,并写入环境变量 PYTHONPATH 中。我写的是/lib/python27.zip:/lib/python2.7:/lib/python2.7/plat-cygwin:/lib/python2.7/lib-tk:/lib/python2.7/lib-old:/lib/python2.7/lib-dynload

下面是我在 mac 下编译遇到的问题及解决办法:

首先官网上的环境准备要先做好,参考下面链接的 Setting up a Mac OS build environment 章节。防止意外,里面提到的 gmake 降级我都做了。
https://source.android.com/source/initializing

1. build/core/combo/mac_version.mk: Can not find SDK 10.6 at XXX

写这篇文章时 SDK 已经去到 10.12 了,而打开build/core/combo/mac_version.mk 一看,上面写着 supported versions 只支持 10.6 10.7 10.8 10.9。我直接在 supported version 上加了 10.12。结果遇到第二个问题。

2. desperate method XXXX

具体方法名字我忘了,说是 10.12 这个方法已经废弃了。那没办法,搜了一下 SDK 可以从网上下载。下载链接https://github.com/phracker/MacOSX-SDKs/releases

参考文章,教你如何放置 SDK 到正确路径:
http://www.jianshu.com/p/1513fc9e1a74

我看既然是找不到 10.6了,那就直接下 10.6 吧!结果出了第三个问题。

3. no member named llrintl / no member named llroundl

编译器说只有 lrintl 没有 llrintl。我跑去 MacOS SDK 里面看,有 llrintl,但是被宏控制着,因为其不是 C90 标准,需要加 -srd=c99 才可以。但要我找到调用编译的位置实在太麻烦了。

继续 google,有人说 10.11 10.9 都成功了,那我下一个 10.9放进去吧。结果还是提示找不到 10.6。

说好的 supported versions 呢?!我生气的吧 supported versions 中的 10.6 10.7 10.8 都删掉了,10.6 的 SDK 目录也删了,只留了一个 10.9。成功!

4. 切换分支时遇到:error.GitError: manifests rev-list (‘^HEAD’, ‘XXXXX’, ‘–‘): fatal: bad revision ‘^HEAD’

原因可能有好几个,我用了网上的方法都没有凑效。这个错误在我这里是 .git 的 HEAD 值丢失了,至于为什么我也不知道。这条语句的意思是:

在 manifests 这个 git 项目中执行 git rev-list ^HEAD XXXXX — 这个命令时,报错 fatal: bad revision ‘^HEAD’,即错误的版本 HEAD,意思是 HEAD 对应的 git 版本不正确。其中 manifests 这个工程在 .repo/manifests 中。 HEAD 对应的 git 版本存储在 .repo/manifests/.git/HEAD 中,这个 HEAD 文件的值为 ref: refs/heads/default。然后发现并没有 .repo/manifests/.git/heads/default 这个文件。解决办法:在其他目录重新 repo init 一次,把这个文件拷过来即可。

奇怪的是,我之前按照 http://blog.leanote.com/post/gyhlqq@gmail.com/Android-repo-sync-issue-fatal-bad-revision-HEAD-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88 将整个 repo init 相关的文件都覆盖过去了,这个文件应该也复制过去才对,结果没有。

嗯。。我傻逼了,cp 命令的 src 为目录时,不是拷贝目录,而是把目录下的所有文件拷贝过去。还是推荐上面链接的做法,因为不止这一处会出问题,直接整个覆盖是最吼的。

版权所有,转载请注明出处:

http://sickworm.com/?p=346




没有评论


你先离开吧:)



发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.