博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
miui patchrom项目开发详细教程(Being updated)
阅读量:5311 次
发布时间:2019-06-14

本文共 8802 字,大约阅读时间需要 29 分钟。

 

 

 

 

 

linux64位android开发环境

miui patchrom项目开发

by: curtischen 整合修改【本人正在学习中,一直更新】

 

 

 

 

******************************************************************************
******************************************************************************

1 准备工作 下载所需软件(均为官方原版,只是离线下载到了百度网盘)

 

1.1 deepin_2013_zh-hans_amd64.iso
http://pan.baidu.com/s/1i3G8Xhz

1.2 jdk-6u38-linux-x64.bin

http://pan.baidu.com/s/1mgBdmR2

1.3 eclipse-jee-indigo-linux-gtk-x86_64.tar.gz

http://pan.baidu.com/s/1dDqYEI1

1.4 android-sdk_r22.6.2-linux.tgz

http://pan.baidu.com/s/1gd66IbD

1.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.bin

2.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.gz

2.2.2.1 解压

tar -xzf eclipse-jee-indigo-linux-gtk-x86_64.tar.gz

2.2.2.2 将解压得到的eclipse目录移动到 android目录下

mv eclipse ~/android

2.2.2.3 创建桌面链接(若不行,手动创建链接到桌面)

ln ~/android/eclipse ~/桌面/eclipse

2.2.3 环境变量的配置(把这个提前了,因为不先配置环境变量,下载Android SDK Platform-tools是会提示JAVA错误)

2.2.3.1打开/etc/profile文件,具体可使用如下命令:

sudo gedit /etc/profile

2.2.3.2 在最后添加下列内容:

 

# set android home
ANDROID_HOME=/home/colinchen/android

# set java environment

export JAVA_HOME=$ANDROID_HOME/jdk1.6.0_38
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export

PATH=$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.tgz

2.2.4.2 将解压得到的android-sdk-linux目录移动到 android目录下

mv android-sdk-linux ~/android

2.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.deb

2.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.reject

2.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:$PATH

2.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 hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

3.5 编辑51-android.rules

sudo 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.rules

3.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 patchrom

cd 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_u10

cd 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

转载于:https://www.cnblogs.com/qinglinchen/p/3748228.html

你可能感兴趣的文章
Apache 使用localhost(127.0.0.1)可以访问,使用本机IP(局域网)不能访问
查看>>
ASP.NET获取自增长列(标识列)的ID
查看>>
分析MySQL各项指标
查看>>
安装虚拟机
查看>>
Webserver推送技术
查看>>
SSI框架总结
查看>>
空间分析概述
查看>>
面试官问你的缺点是什么,你会怎么回答?看看面试官的那些“套路
查看>>
NET二进制图片存储与读取数据库的常见方法
查看>>
返回字符串的长度
查看>>
JS中的加减乘除和比较赋值
查看>>
WebRequest请求被中止: 未能创建 SSL/TLS 安全通道
查看>>
hiho 1050 树中的最长路 (树的直径)
查看>>
怎样推断一棵二叉树是全然二叉树
查看>>
【HDU 2014 Multi-University Training Contest 1 1002】/【HDU 4862】Jump
查看>>
Welcome-to-Swift-21协议(Protocols)
查看>>
[bzoj4303] 数列
查看>>
[LOJ2027] [SHOI2016] 黑暗前的幻想乡
查看>>
使用jquery将表单元素转json提交后台
查看>>
保证多线程间的可见性,所以声明为volatile
查看>>