Android patchrom 流程详解

本文详细介绍了Android patchrom的工作流程,包括建立Ubuntu环境、拉取LeWa patchrom平台代码,以及在Nexus5上的编译实践。通过`make workspace`、`make firstpatch`和`make fullota`三个步骤,分析了patchrom如何修改framework并生成刷机包和OTA包。patchrom适用于对rom进行二次开发,特别是仅修改framework层和app层的厂商。
摘要由CSDN通过智能技术生成

从去年中接触到patchrom,而之后也有很大一部分时间投入到之中,所以对patchrom的整个流程也略之一二。而patchrom,可以看成是一个对rom二次开发比较实用的工具,而不是仅仅向对miui, 或者乐蛙等rom进行机型的适配。废话不多说。
1,首先需要装载好ubuntu环境,这个网上都有教程也就不再作介绍了。
2,需要拉取一份Miui 或者 lewa 的pathrom 的平台代码。因为博主熟悉lewa这里就用lewa的patchrom 4.4平台做介绍了。
3,首先从githup上面将lewa4.4 patchrom平台的代码拉取下来。
1.创建githup帐号以及githup帐号的配置。参见http://blog.csdn.net/tangbin330/article/details/9128765
2.配置githup以后可以通过
mkdir patchrom
cd patchrom
repo init -u git://github.com/LeWaCode/patchrom.git -b kitkat
然后同步代码:
repo sync
3.在这个平台下有几款已经适配好了的机型,我们用nexus5进行分析。
我们在patchrom 目录下 执行 . build/envsetup.sh
然后
cd nexus5
make workspace
make firstpatch
make fullota
通过这三部我们就能够在out目录下找到生成的刷机包以及ota包。

patchrom 是如何工作的呢?
下面我们来分析patchrom平台的结构
他包含了android , build , lewa, tools 四个主要目录以及各个机型的目录。
android 目录:
android.policy.jar.out framework2.jar.out framework.jar.out services.jar.out telephony-common.jar.out
这些目录是rom方修改过的framework的代码所成生的smail 通过通过apktools d 将 编译好的framek*.jar 解开放入该目录下。
而base-framework则放入的是google aosp代码所编译的smail 文件。
build 目录:
存放主要编译流程的文件,主要为mk, make 编译可参见http://blog.csdn.net/onlyou930/article/details/6553870
tools 目录:
存放patchrom 需要用到的各种工具,以下会做介绍。
lewa 目录:
存放rom方提供的基础包,该包是在aosp 源码上修改得到的一个rom包。

然后我们进入机型目录nexus5地方下,我们看看make workspace 都做了什么?
我们找到了workspace在 build/util.mk 内

workspace: apktool-if $(JARS_OUTDIR) $(APPS_OUTDIR) fix-framework-res restore-obsolete-keyguard
@echo Prepare workspace completed!

我们来看看 这一句都干了什么呢?
其中 apktool-if 是将需要的系统资源装载好,其中包括乐蛙的framework-res.apk,lewa-res.apk 和 底包的framework-res.apk
第二个JARS_OUTDIR则是将底中的framework.jar framework2.jar services.jar android.policy.jar telephony-common.jar 解压本且反编译成smali 放入机型目录下供之后patch使用
而后面的两句则是针对apktool 预处理framework-res 和 keyguard 的一些问题 可以先不管。
总之现在第一步workspace 就执行完了,也就有了patch的目标目录和之后处理系统apk需要用到的资源。
下面第二部:make firstpatch:

# Target to add lewa hook into target framework first time
firstpatch:
    $(PATCH_LEWA_FRAMEWORK) $(PORT_ROOT)/android/base-framework $(PORT_ROOT)/android `pwd`

我们来看看代码,PATCH_LEWA_FRAMEWORK 在porting.mk 里面被赋值为

PATCH_LEWA_FRAMEWORK  := $(TOOL_DIR)/patch_lewa_framework.sh $(INFO)

其实就是执行tool 下的patch_lewa_framework.sh 这个脚本 而后面的三个参数则是需要用的参数。我们看看脚本代码 并不多:`


#!/bin/bash

# $1: the old smali code  $2: the new smali code $3: the destination smali code

if [ $# -ne 3 ];then
    echo "Usage: patchlewa.sh old_smali_dir new_smali_dir dst_smali_dir"
fi

#其中 $1 $2 $3 分别对应的是aosp framework的smail目录, rom开发方的framework smali目录 和 当前目录

PWD=`pwd`
old_smali_dir=$1
new_smali_dir=$2
dst_smali_dir=$3
temp_dir=$PWD/temp
temp_old_smali_dir=$temp_dir/old_smali
temp_new_smali_dir=$temp_dir/new_smali
temp_dst_smali_orig_dir=$temp_dir/dst_smali_orig
temp_dst_smali_patched_dir=$temp_dir/dst_smali_patched
reject_dir=$temp_dir/reject

rm -rf $temp_dir

echo "<<< create temp directory to store the old, new source and destination smali code with
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值