http://blog.csdn.net/arfee_11/article/details/7268396
最近尝试在android模拟器上安装taintdroid,结果安装的时候才发现网上别人的安装过程存在源代码的链接过时、服务器上的文件被挪动了位置等问题。历尽千辛万苦终于安装成功,下面将自己的安装过程贴上,免得后面有兴趣的童鞋走冤枉路。
我使用的是32位的Ubuntu10.04,安装taintdroid需要自己编译android2.1的源码,在此之前,需要确保自己的系统环境以及搭建好,注意点如下:
(1)JDK1.5 :安装了JDK1.6及以上版本的系统可能在编译android源码的时候报错,以及安装JDK时环境变量必须配置好,否则很可能导致失败;
(2)还有以下包必须安装:git-core repo gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib 1g-dev ,这些使用apt-get install 命令即可;
(3) 如果gcc和g++版本高于4.3,可能也会引起android源码的编译错误,所以如果发现在编译源码时有类型错误则可把gcc和g++版本降低,具体过程不详述。
环境配置好了以后开始安装的整个流程:
Step1. 获取android的源代码:这里下载的是android-2.1_r2.1p分支
... wait,等待下载完成,网速可以的话需要大约1个小时% mkdir -p ~/tdroid/tdroid-2.1_r2.1p% cd ~/tdroid/tdroid-2.1_r2.1p% repo init -u https://android.googlesource.com/platform/manifest -b android-2.1_r2.1p% repo sync
% . ./build/envsetup.sh% lunch 1% make -j4... wait% emulator
... 如果该指令有反应,说明编译成功
Step2. 为taintdroid做修改:下载local_manifest.xml文件(http://appanalysis.org/files/local_manifest.xml)并放入~/tdroid/tdroid-2.1_r2.1p/.repo文件夹下。
然后确认版本控制是正确的:
% cd ~/tdroid/tdroid-2.1_r2.1p% repo sync% cd dalvik% git branch --track taintdroid-2.1_r2.1p github/taintdroid-2.1_r2.1p% git checkout taintdroid-2.1_r2.1p% git pull% cd ..% cd frameworks/base% git branch --track taintdroid-2.1_r2.1p github/taintdroid-2.1_r2.1p% git checkout taintdroid-2.1_r2.1p% git pull
Step3.添加ext2 SDcard支持:需要修改两个文件/vold/volmgr.c和/vold/volmgr_ext3.c,该文件在system/core文件夹下,要修改的部分如下(红色部分,减号表示去掉,加号表示添加):
diff --git a/vold/volmgr.c b/vold/volmgr.cindex deb680e..a5f5789 100644--- a/vold/volmgr.c+++ b/vold/volmgr.c@@ -43,7 +43,7 @@ static volume_t *vol_root = NULL;static boolean safe_mode = true;static struct volmgr_fstable_entry fs_table[] = {-// { "ext3", ext_identify, ext_check, ext_mount , true },+ { "ext3", ext_identify, ext_check, ext_mount , true },{ "vfat", vfat_identify, vfat_check, vfat_mount , false },{ NULL, NULL, NULL, NULL , false}};diff --git a/vold/volmgr_ext3.c b/vold/volmgr_ext3.cindex fe3b2bb..8979c70 100644--- a/vold/volmgr_ext3.c+++ b/vold/volmgr_ext3.c@@ -157,7 +157,8 @@ int ext_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)char **f;for (f = fs; *f != NULL; f++) {- rc = mount(devpath, vol->mount_point, *f, flags, NULL);+ //rc = mount(devpath, vol->mount_point, *f, flags, NULL);+ rc = mount(devpath, vol->mount_point, *f, flags, "user_xattr");if (rc && errno == EROFS) {LOGE("ext_mount(%s, %s): Read only filesystem - retrying mount RO",devpath, vol->mount_point);
Step4.打补丁并配置内核并重新编译
% cd ~% wget http://www.appanalysis.org/files/yaffs_xattr.patch...% cd ~/tdroid/tdroid-2.1_r2.1p% git clone https://android.googlesource.com/kernel/goldfish.git% cd goldfish% git branch --track android-gldfish-2.6.29 origin/android-gldfish-2.6.29% git checkout android-gldfish-2.6.29% git pull% patch -p1 < ~/yaffs_xattr.patch
需要重新配置下:
% cd ~/tdroid/tdroid-2.1_r2.1p% . ./build/envsetup.sh% lunch 1
在弹出的内核配置中分别为EXT2和YAFFS选择XATTR和SECURITY选项,保存并退出...wait% cd goldfish% export ARCH=arm% export SUBARCH=arm% export CROSS_COMPILE=arm-eabi-% make goldfish_defconfig% make oldconfig% make menuconfig
% make -j4% cp arch/arm/boot/zImage ~/
Step5.
% cd ~/tdroid/tdroid-2.1_r2.1p#在当前文件夹下新建buildspec.mk文件,并把以下内容拷贝进去,然后保存并退出:# Enable core taint tracking logic (always add this)WITH_TAINT_TRACKING := true# Enable taint tracking for ODEX files (always add this)WITH_TAINT_ODEX := true# Enable taint tracking in the "fast" (aka ASM) interpreter (recommended)WITH_TAINT_FAST := true# Enable addition output for tracking JNI usage (not recommended)#TAINT_JNI_LOG := true再进行最后一次编译:% . ./build/envsetup.sh% lunch 1% make clean% make -j4
Step6. 安装了taintdroid的镜像就编译好了,下面只要再安装一个Android SDK,配置好ANDROID_SDK_HOME变量(为Android SDK的根目录路径),并使用其新建一个2.1版本的虚拟机。一般而言,新建的虚拟机放在$ANDROID_SDK_HOME/.android/avd文件下。
做好以上工作后,运行下列指令:
% emulator -avd *** -kernel ~/zImage -ramdisk ~/tdroid/tdroid-2.1_r2.1p/out/target/product/generic/ramdisk.img -system ~/tdroid/tdroid-2.1_r2.1p/out/target/product/generic/system.img
注:***为虚拟机名称,该命令运行后,会开启一个android模拟器。在该模拟器加载的时候需要配置模式,可以新开另一个命令行终端,运行下列指令:
% adb shell setprop dalvik.vm.execution-mode int:portable
注:该命令可能会报错:device offline!此时可以重复运行该指令直到成功为止。如果一直不成功,到系统监视器中关闭adb进程,并重新运行上述两条指令即可。
下面只要等待emulator启动完毕即可。不过android模拟器不是一般的慢,首次启动要等挺久的。
进入android系统界面后,需要先给taintdroid安装图形界面:
% wget http://www.appanalysis.org/files/TaintDroidNotify.apk% adb install TaintDroidNotify.apk
安装成功后菜单中就有TaintDroid了。
至于TaintDroid的使用教程,就不多说了,见下面链接:http://appanalysis.org/demo/index.html
祝各位好运~