flyme6 patchrom插桩从入门到放弃

前言

通过flyme官方开源patchrom工具插桩,禁止转载
需要了解linux基本操作,了解基本终端命令
本人刚学插桩,这只是我插桩的一个简单流程,中间可能有错误,可提醒我更改

推荐教程


系统环境配置

  • 使用系统是Ubuntu16.04 64位 VMware环境
  • 系统安装不在多做介绍,百度有各种安装教程
  • 推荐给硬盘分60G

编译环境配置

flyme6插桩所需要的环境如下

$sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib git flex bison gperf build-essential libncurses5-dev:i386 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl1.2-dev libesd0-dev git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip repo openjdk-8-jdk android-tools-adb

:$符号不用输入,代表在终端输入。
由于不同系统自带环境不一样,缺少部分环境导致最后编译出现各种问题,所以推荐全部安装


同步代码

拉取flyme官方开放的插桩工具及源码

  • 由于源码在github根据个人网速不一样,下载时间也不定,可能需要自备梯子

##拉取源码
建立项目文件夹 flyme 开始同步源码

$mkdir flyme
$cd flyme
$repo init --repo-url git://github.com/FlymeOS/repo.git \
            -u https://github.com/FlymeOS/manifest.git \
            -b marshmallow-6.0 --no-repo-verify          

期间可能github可能需要你提供name和email

$git config --global user.email '你的邮箱'
$git config --global user.name '你的用户名'

然后同步代码

$repo sync --no-clone-bundle -c -j4

等待代码同步完成
如果出现网络中断或其他原因导致失败,再次执行即可

$repo sync --no-clone-bundle -c -j4

##目录解析
同步完成之后的文件夹如图

项目文件夹

参考flyme github的解释

flyme                   你之前建立的项目文件夹
 +-- manifest           项目清单
 +-- tutorials          教程文档
 +-- plugins            扩展插件,用于扩展已有功能
 +-- build              编译环境,用于构建和编译机型
 +-- tools              适配工具
 +-- flyme              Flyme相关,内容定期更新
      +-- release       官方发布的ROM包
      +-- overlay       资源覆盖
 +-- devices            机型目录
      +-- base          官方提供的默认机型
      +-- Z2121         待开发者适配的机型,这里我们在适配开始时会建立此文件夹 

#选择合适的底包
新手建议用los13(cm13)做底包,因为没有各种问题,冲突也少大概只有80多个

  • 基于Android 6.0
  • 越稳定越好(官方包相对越稳定,插桩难度大)
  • 对aosp修改越少(越接近原生,插桩难度小)
  • 能root,或者刷super su

选择好合适的底包之后通过论坛上的教程刷入到自己手机

并且提取出底包中的 boot.img 和适合本机的 recovery.img (尽量使用官方的)待用


#开始插桩

##安装Beyond Compare
浏览器打开 http://www.scootersoftware.com/download.php
选择64-bit的debian
然后点击Save File,下载完成后在下载文件夹打开终端

$sudo apt install 'file'

‘flie’:刚才下载的bcompare安装文件

安装完成之后可以在所有软件里面找到bcompare,并且打开它

##初始化flyme环境

注意:每次重新打开终端都要初始化flyme运行环境

在flyme项目目录打开终端

$source build/envsetup.sh

初始化flyme环境完成

##flyme config 拉取Makefile

在devices目录下建立机型目录Z2121,并且切换到机型目录Z2121

$cd devices
$mkdir Z2121
$cd Z2121

在手机中打开 开发者选项 > 开启调试,并且通过usb链接电脑
推荐机箱后置usb2.0接口

如果是虚拟机需要将usb设备添加到虚拟机

添加usb设备到虚拟机

在终端中输入adb devices开启adb调试,并且在手机上允许调试

$adb devices

再次输入 adb devices 直到变成device就表示已经连上了

$adb devices

这里写图片描述

将之前准备好的 boot.imgrecovery.img 放入到机型目录Z2121

终端切换到机型目录 Z2121 输入 flyme config,手机里面给adb shell root权限,开始拉取配Makefile

$flyme config

flyme config完成之后的文件截图如下

flyme config

修改机型目录下面的Makefile文件

注意:所有修改都只修改自己的机型目录,不能动base目录

用bcompare比较 devices 目录下面的 base 和自己的机型目录 Z2121
打开Makefile文件

修改 romer ,和 model_romer 并且加入 device ,根据自己机型填写即可

romer

去掉OTA前面的注释,不生成dat刷机包

ota

保存机型目录的Makefile文件,暂时只修改这两处

##flyme newproject 拉包

终端切换至机型目录 Z2121 输入 flyme newproject 开始拉包

$flyme newproject

稍等片刻(几个小时)拉包完成

newproject

注:根据Makefile配置不同,几个反编译文件夹些许不同,其实有几个是多余的,先不管

##flyme patchall自动插桩

第一次插桩之前我们可以更新下源码,用flyme最新源码插桩(非必要),项目目录打开终端

$repo sync --no-clone-bundle -c -j4

终端在机型目录 Z2121 输入 flyme patchall 开始自动插桩,这个过程大概几十分钟吧,稍等片刻即

自动插桩完成,终端会有提示多少个冲突及冲突文件的位置

冲突

机型文件夹文件解析

Z2121                           你之前建立的机型文件夹
 +-- autopatch                  自动插桩的产物
      +-- aosp                  aosp部分框架层反编译之后的文件
      +-- bosp                  bosp部分框架层反编译之后的文件
      +-- reject                patchall之后所有报冲突的smali文件
      +-- patchall.xml          patchall项目清单
      ...
 +-- boot.img.out               厂商boot.img反编译之后的文件
 +-- framework.jar.out          厂商framework.jar反编译之后的文件
 +-- framework-res              厂商framework-res.apk反编译之后的文件
 +-- services.jar.out           厂商services.jar反编译之后的文件
 +-- telephony-common.jar.out   厂商telephony-common.jar反编译之后的文件
 +-- wifi-service.jar.out       厂商wifi-service.jar反编译之后的文件
 +-- vendor                     拉包拉出来的厂商文件(可以暂时理解为手机根目录 /)
 +-- out                        输出目录
 ...

注意:aosp、bosp和reject这三个文件夹是用来给你对比差异的,不能修改

##手动解冲突
建议解冲突按照reject和机型目录对比一个文件一个文件解决

###入门级冲突
打开bcompare
开两个对比aosp和bosp的对比,reject和机型目录的对比

选择对比不同但不独有

对比

先举一个修改boot的例子
通过reject和机型目录的对比看到init.environ.rc这个文件存在冲突

这里写图片描述

打开init.environ.rc首先 看到reject这一边标注出来了

<<<<<<< VENDOR
  原厂的代码块
=======
  Flyme的代码块
>>>>>>> BOSP

这里写图片描述

通过军华的三步骤对定调,首先是对比
打开aosp和bosp的init.environ.rc文件对比

这里写图片描述

然后定位,可以看到这个冲突只是bosp(flyme)对aosp添加了一部分,
最后调,同样我们把添加的这一部分放在我们厂商同样位置(这一行的末尾)

这里写图片描述

即解决了第一个简单的插入冲突

###通过上一个简单例子来了解插桩的原理
文字解释可能很生硬,当你去看看那些视频教程了就会知道大概了

插桩原理
即根据 bosp(flyme)aosp(Android) 插入、修改、删除等操作在我们 厂商对应的文件 中做相同操作

冲突的产生
是因为flyme工具在自动帮你做上面那个 相同操作(patchall) 的时候是根据同名smali文件中的方法和上下文来插桩的,当工具发现上下文对不上、或者方法名字对不上的时候就给你报冲突了,并且把冲突用下面这种方式在reject文件中给你标记出来,
当你对比reject和机型目录的时候就很容易找到冲突位置

<<<<<<< VENDOR
  原厂的代码块
=======
  Flyme的代码块
>>>>>>> BOSP

冲突的解决——军华大神3步骤

注意:此位置只是工具找到的位置,不一定是正确的位置,需要你用对定调来解决

###简单的插入冲突


  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值