linux64位android开发环境
miui patchrom项目开发by: curtischen 整合修改【本人正在学习中,一直更新】
************************************************************************************************************************************************************
1 准备工作 下载所需软件(均为官方原版,只是离线下载到了百度网盘)
1.1 deepin_2013_zh-hans_amd64.isohttp://pan.baidu.com/s/1i3G8Xhz
1.2 jdk-6u38-linux-x64.bin
http://pan.baidu.com/s/1mgBdmR21.3 eclipse-jee-indigo-linux-gtk-x86_64.tar.gz
http://pan.baidu.com/s/1dDqYEI11.4 android-sdk_r22.6.2-linux.tgz
http://pan.baidu.com/s/1gd66IbD1.5 bcompare-3.3.4.14431_amd64.deb
http://pan.baidu.com/s/1kTBit7L
******************************************************************************
******************************************************************************2 软件安装 推荐使用 linuxdeepin 64 位,DeepWin安装适合新手朋友,免去你的分区烦恼http://wiki.linuxdeepin.com/inde ... n%E5%AE%89%E8%A3%85提醒:请不要在root用户下搭建以下开发环境和进行ROM的开发工作【如果只有root用户,请新建个人用户】
2.1 在当前用户home目录下新建android目录:(jdk, sdk, eclipse安装移动后都将放在这个目录)mkdir ~/android 2.2 软件安装(将下载的文件全部复制到桌面上,直接在桌面运行终端)
2.2.1 JDK安装 下载jdk-6u38-linux-x64.bin
2.2.1.1 在jdk-6u38-linux-x64.bin所在目录下,添加可执行权限,并运行该文件
chmod +x jdk-6u38-linux-x64.bin
./jdk-6u38-linux-x64.bin2.2.1.2将生成的jdk1.6.0_38目录移动到android目录下:
mv jdk1.6.0_38 ~/android
2.2.2 安装Eclipse 下载Eclipse Linux版压缩版 eclipse-jee-indigo-linux-gtk-x86_64.tar.gz2.2.2.1 解压
tar -xzf eclipse-jee-indigo-linux-gtk-x86_64.tar.gz2.2.2.2 将解压得到的eclipse目录移动到 android目录下
mv eclipse ~/android2.2.2.3 创建桌面链接(若不行,手动创建链接到桌面)
ln ~/android/eclipse ~/桌面/eclipse 2.2.3 环境变量的配置(把这个提前了,因为不先配置环境变量,下载Android SDK Platform-tools是会提示JAVA错误)2.2.3.1打开/etc/profile文件,具体可使用如下命令:
sudo gedit /etc/profile2.2.3.2 在最后添加下列内容:
# set android homeANDROID_HOME=/home/colinchen/android
# set java environment
export JAVA_HOME=$ANDROID_HOME/jdk1.6.0_38export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATHexportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ANDROID_HOME/android-sdk-linux/tools/:$ANDROID_HOME/android-sdk-linux/platform-tools/:$PATH
2.2.3.3 然后保存
source /etc/profile
2.2.3.4 查看java是否安装成功java -version
2.2.3.5 重启
2.2.4 安装Android sdk 下载android-sdk_r22.6.2-linux.tgz
2.2.4.1 解压:
tar -xzf android-sdk_r22.6.2-linux.tgz2.2.4.2 将解压得到的android-sdk-linux目录移动到 android目录下
mv android-sdk-linux ~/android2.2.4.3 进入~/android/android-sdk-linux/tools文件夹,运行程序android
./android
2.2.4.4 会弹出一个更新界面,这个界面会自动更新可以安装的列表,大概需要几分钟,更新完成后,我们选择Tools下的Android SDK Platform-tools 这个包,点击install 1 package 安装,因为adb目前放在这个包里面安装完成后可以在~/android/android-sdk-linux/platform-tools/下看到adb 的应用至此adb下载完成。如果直接执行adb shell会提示你没有权限,这就需要在root模式下启动adb 服务了
2.2.5 安装 bcompare 下载 bcompare-3.3.4.14431_amd64.deb2.2.5.1 点击安装即可
2.2.5.2
bcompare用与文件的对比,命令如下:
两项对比bcompare framework-res/AndroidManifest.xml out/reject/framework-res/AndroidManifest.xml.reject三项对比
bcompare autopatch/bosp/framework-res/AndroidManifest.xml framework-res/AndroidManifest.xml out/reject/framework-res/AndroidManifest.xml.reject2.2.6 repo安装
2.2.6.1 个人目录下创建bin目录,这是为了保存repo 等更新脚本的
mkdir -p ~/bin
2.2.6.2 安装git
sudo apt-get install git-core
2.2.6.3 安装curl
sudo apt-get install git-core curl
2.2.6.4 安装repo, 通过curl下载repo并给于权限
curl http://git-repo.googlecode.com/files/repo-1.13 > ~/bin/repo
chmod a+x ~/bin/repo
2.2.6.5 也可以把 ~/bin/repo 加入到环境变量里面,终端输入
sudo gedit /etc/profile
2.2.6.6 打开的文件添加
# add bin in path
export PATH=~/bin:$PATH2.2.6.7 更改结束之后终端输入
source /etc/profile
2.2.6.8 重启
sudo reboot
******************************************************************************
******************************************************************************3 配置usb识别android设备
3.1 adb的下载安装
sudo apt-get install android-tools-adb
3.2 在/etc/udev/rules.d/目录下创建51-android.rules文件
sudo touch /etc/udev/rules.d/51-android.rules:
3.3 终端输入 lsusb
lsusb 3.4 会出现Bus 001 Device 003: ID 24e3:7112 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hubBus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubBus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 3.5 编辑51-android.rulessudo gedit /etc/udev/rules.d/51-android.rules
3.6 然后添加
SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", ATTR{idProduct}=="7112", MODE="0600"
3.7 点击保存然后给予权限
sudo chmod a+rx /etc/udev/rules.d/51-android.rules3.8 接着终端输入
sudo /etc/init.d/udev restart
3.9 关闭adb
sudo adb kill-server
[sudo] password for administrator: 输入你的密码
3.10 开启adb
sudo adb start-server
3.11 出现* daemon not running. starting it now on port 5037 ** daemon started successfully *3.12 输入
sudo adb devices
3.13 出现类似这样,device这时已经识别到你的设备了.
List of devices attached 0123456789ABCDEF
******************************************************************************
****************************************************************************** 4 同步源码4.1打开终端:请输入:
mkdir -p ~/bin
mkdir -p ~/android/patchrom个人目录下的bin目录是为了保存repo 等更新脚本的
4.2 依然再终端输入:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo ~/bin/repo
chmod a+x ~/bin/repo
可以把 ~/bin/repo 加入到环境变量里面终端输入 sudo gedit /etc/environment
在PATH=“”加入PATH=/home/colinchen/bin:qingtian为我个人目录的名称,也就是我的计算机登录名更改结束之后终端输入 source /etc/environment就能直接在终端中使用repo 命令了。 4.3 同步MIUI代码 我们创建一个patchrom 目录,使用patchrom 的树来初始化你的本地仓库 mkdir patchromcd patchrom
repo init -u git://github.com/MiCode/patchrom.git -b ics (MIUI V4)repo init -u git://github.com/MiCode/patchrom.git -b jellybean (MIUI V5)repo init -u git://github.com/MiCode/patchrom.git -b jellybean42-mtk (MIUI V5-MTK) 注意 上面3个是选择一个进行同步!然后我们就可以开始同步啦。
repo sync
适配过程miui系统的适配就是利用小米公司在github上面提供的patchrom然后我们自己做修改,它的原理就是通过反编译生成的smali文件进行对比:
把我们的系统生成一份smali文件miui系统生成一份smali文件原生android未做修改的系统也生成一份smali文件然后就去对比miui相对原生android做过哪些修改,然后我们就把我们系统对应的smali文件也做相应的修改,从而达到适配的目的。现在miui的patchrom的脚本已经很强大了,我们只要改好smali文件后,剩下的一些资源和其他文件miui自己的脚本会自动帮我们加入到我们的工程里面来。首先是先使用repo同步miui的同步好了就可以开始适配之旅了:
首先配置下环境
. build/envsetup.sh
新建自己的机型目录
mkdir h30_u10cd h30_u10
然后就是提取官方刷机包:
rec提取的方法:
../tools/releasetools/ota_target_from_phone -r
采用开机提取的方法:
../tools/releasetools/ota_target_from_phone -n
出现下列参数:输入YES即可Warning: the ota package will not contain bootimage!!!Maybe you forget to pass the ota-package parameter.Are you sure this is really what you want(yes/no):yes
等待提取成功,会在我们的机型目录下成功一个stockrom.zip,这个就是我们的ROM包,还会生成一个metadata目录,里面主要记录一些我们手机的分区信息和签名信息,这两个不文件不能删了,后续生成自己的ROM包需要用。
然后从工程的android/目录下拷贝一个makefile文件到我们的手机目录,把里面的这一项local-zip-file := null.zip改成local-zip-file := stockrom.zip然后我们就可以反编译我们刚刚提取出来的官方包了:
同步MTK的源码就不用这步了。反编译前来个插曲:由于我们的系统是AOSP的底包,所以还要对build/目录下的porting.mk文件的MIUI_JARS := services android.policy framework framework2改成MIUI_JARS := services android.policy framework framework_ext改好后就可以在终端敲入:make workspace反编译后在我们的目录下就会生成反编译的目录,以后我们的插桩就是对这些文件进行patch
然后终端敲入:
make firstpatch 时间有点长,等待完成。 完成后会在机型目录下生成一个temp目录里面有四个文件夹:
dst_smali_orig //这个是我们的系统反编译的smali文件dst_smali_patched //这个是我们执行make firstpatch命令有脚本自动给我们打的patchnew_smali //这个是miui系统反编译的smali文件old_smali //这个是android原生的反编译的smali文件
reject //这个是make firstpatch自动打patch失败的smali文件我们需要关注的就是reject目录,把自动patch打入失败的我们手动加进去,失败的原因就是因为我们的系统对于那部分有过修改,所以上下文对不上,加不进去。手动加入patch的步骤就是先看miu系统和原生的android的区别,然后再看我们的系统跟原生的区别,我们就根据这两点把失败patch的加进去。
举一个例子:
在temp下的
reject/android.policy.jar.out/smali/com/android/internal/policy/impl/有这个一个patch没打上KeyguardUpdateMonitor.smali.rej双击打开看到里面有这个的话:*** 93,98 ****.end annotation.end field.field private mTelephonyPlmn:Ljava/lang/CharSequence;.field private mTelephonySpn:Ljava/lang/CharSequence;— 94,105 —-.end annotation.end field+ .field private mSkipSimStateChange:Z+ .annotation build Landroid/annotation/MiuiHook;+ value = .enum Landroid/annotation/MiuiHook$MiuiHookType;-NEW_FIELD:Landroid/annotation/MiuiHook$MiuiHookType;+ .end annotation+ .end field+.field private mTelephonyPlmn:Ljava/lang/CharSequence;.field private mTelephonySpn:Ljava/lang/CharSequence;这个跟我们的gitk一样的标注,我们就是要在我们机型目录下的android.policy.jar.out/smali/com/android/internal/policy/impl/在KeyguardUpdateMonitor.smali里面相应的位置加入这几条语句:.field private mSkipSimStateChange:Z.annotation build Landroid/annotation/MiuiHook;value = .enum Landroid/annotation/MiuiHook$MiuiHookType;-NEW_FIELD:Landroid/annotation/MiuiHook$MiuiHookType;.end annotation.end field我建议是每加入一处编译一次,成功了就继续加,失败了就找原因,因为反编译回去的时候报错是天书,看不懂的,如果一次改动太多文件才编译最后就不知道是哪个文件报的错了。反编译测试有没有报错是在我们的机型目录下:假设我们手动patch的是 android.policy.jar.out这个目录在终端就输:
apktool b android.policy.jar.out能通过就行。等我们把temp目录下所有的.smali.rej手动加入完成之后就可以在终端输入:make fullota完成了在机型目录的out文件夹下的fullota.zip就是我们需要的ROM包了,刷入后就是适配好了的miui系统。(当然会是各种卡屏,FC,我们只能通过logcat日志再重新分析插桩的问题,重新修改再编译,最后肯定是可以适配完成的) 经过修改部分。
另附miui patchrom视频教程http://pan.baidu.com/s/1d08bT