因工作需要,需对monkey做一下定制,上网找了一些资料,动手做的时候确遇到很多的问题,写此篇文章以作汇总和记录
操作系统:Ubuntu16.04
monkey源码可参考:https://github.com/aosp-mirror/platform_development/tree/master/cmds/monkey/src/com/android/commands/monkey
monkey源码编译依赖Android源码,所以单独的monkey模块代码是不能调试的,要想调试,就需要在完整的Android源码环境下进行编译
那么第一步我们来下载Android源码
下载Android源码
Android源码下载官方文档:https://source.android.com/setup/build/downloading
操作步骤
- repo的下载和安装
在电脑的主目录下新建一个 bin/ 目录,并将它加入路径
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
2 新建工作目录
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
- 初始化仓库,-b参数指定Android版本,使用清华镜像服务器
Android版本细分:https://source.android.com/source/build-numbers.html
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-5.1.1_r24
- 下载源码
repo sync
编译之前,需要了解一下这个小坑: Android版本编译要求的JDK版本!
Android 5.x至android 6.0需使用OpenJDK 7
更多编译要求可以参考:https://source.android.com/source/requirements.html
我的操作系统是Ubuntu 16.04,下载的源码是Android5.x。因为之前安装过OpenJDK 8,所以,第二个坑就来了:下载多个jdk版本并切换
Ubuntu 16.04及之后的版本的在线安装库中只支持openjdk8和openjdk9的安装.因此,如果你想要安装openjdk 7需要首先设置ppa,再执行安装命令
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-getupdate
sudo apt-get install openjdk-7-jdk
关于jdk版本切换,可以使用如下命令:
sudo update-alternatives --config java
sudo update-alternatives --config javac
好了,终于搞定了,可以开始编译源码了
编译源码
步骤
- 初始化编译环境,在工程目录下执行下面的命令
source build/envsetup.sh
-
选择编译的代码要运行在什么设备上,可以先输入lunch,看下效果
- 执行编译
如果需要源码全编的话,可以借助-j参数,设置同步线程数,执行如下命令
make-j8
如果你只想编译monkey源码,则需要打开/development/cmds/monkey/Android.mk
文件,在LOCAL_SRC_FILES:=$(call all-subdir-java-files)
下添加LOCAL_DEX_PREOPT:=false
然后在项目根目录下执行编译
make monkey
编译成功后,会在/out/target/product/generic/system/framework
下生成monkey.jar
编译可能不成功,坑三来了:make monkey
报错,报错如下:
build/core/binary.mk:539: recipe for target 'out/host/linux-x86/obj32/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp' failed
make: *** [out/host/linux-x86/obj32/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] 断开的管
解决方法
sudo apt-get install flex bison
我是在这篇博客中找到了答案:https://nancyyihao.github.io/2016/10/07/complie-Android-5-1-on-Ubuntu-16-04/
坑四:make monkey
编译和 mma development/cmds/monkey/
因为我有一个疑问:make和mma都可以编译源码和其依赖,想知道这两者编译方式有何不同,是否可以选择其一即可?
所以尝试了两种编译方式后,得出的答案是:不是!!
make monkey
编译源码,会生成monkey.jar
mma
只是执行了编译,没有jar包生成
好了,monkey编译的踩坑指南就到这儿了,后续会继续更新monkey修改相关的文章。over!