前言

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

推荐教程

  • 百度云os学院相关教程了解插桩原理
  • 军华flyme公开课

系统环境配置

  • 使用系统是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 config 拉取Makefile

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

$cd devices
$mkdir Z2121
$cd Z2121

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

如果是虚拟机需要将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完成之后的文件截图如下

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

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

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

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

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

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

flyme newproject 拉包

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

$flyme 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步骤

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

简单的插入冲突


flyme6 patchrom插桩从入门到放弃相关推荐

  1. htcm7刷linux,HTC ONE M7刷机包 Flyme6 安卓6.0插桩适配 顺畅体验 完整root 6.7.6.5R

    基于lineage os安卓6.0.1底包插桩适配;;本期更新:通讯 优化:通讯信号 修复:信号无法满格问题 修复:无SIM卡联系人入口问题 修复:部分双卡机型插单卡拨号仍然显示双卡问题 修复:部分机 ...

  2. 【网上的都不靠谱?还是得改源码】用Javasisst的字节码插桩技术,彻底解决Gson转Map时,Int变成double问题...

    一.探究原由 首先申明一下,我们要解决的问题有两个: Json串转Map时,int变double问题 Json串转对象时,对象属性中的Map,int变double问题 然后,我们来了解一下,Gson实 ...

  3. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...

    作者:小傅哥 博客:bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获! ❞ 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了 ...

  4. 服务器2颗cpu的性能,DIY从入门到放弃:两颗CPU性能更强吗?

    如果DIY让你觉得头疼,说明你的思路是正确的. 两根内存组双通道性能更强,两块硬盘组RAID速度提升,那你肯定想过,给主板多开一个CPU插槽组成双CPU平台,性能岂不是会更强吗? 这个问题问得好 来来 ...

  5. 【open stack】openstack从入门到放弃

    原文地址:http://www.cnblogs.com/linkenpark/p/5898598.html openstack从入门到放弃 目录: 为何选择云计算/云计算之前遇到的问题 什么是云计算 ...

  6. 【机器学习炼丹炉】使用便宜的x99和二手显卡,单显卡的学习机器在3000元,多显卡更贵,可以用支架,架起显卡,用做算法的学习使用,模型训练需要显卡的算力支持,低成本做算法研究,万一从入门到放弃了呢

    1,使用便宜的x99平台做炼丹炉 为啥呢,因为便宜. 采购设备 价格 功率 主板 668元 风扇 58元 主板支架 35元 cpu 2676v3 88元 120w 内存16G X 条 220元 西部数 ...

  7. Android插件化:从入门到放弃

    喜欢 | 作者 包建强 发布于 2016年7月14日. 估计阅读时间: 1 分钟 | 道AI风控.Serverless架构.EB级存储引擎,尽在ArchSummit!讨论 分享到:微博微信Facebo ...

  8. ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称以及入参和出参结果并记录方法耗时

    作者:小傅哥 博客:bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了多少代码 ...

  9. android逆向01:修改apk的资源文件,smali插桩

    前提: 有需求才有实现. android逆向能干什么?去除游戏中的广告,跳过各种支付达到付费效果,人为干预简化游戏流程直奔主题,无限增加各种付费道具,等等:当然可以对自己的apk进行逆向的逆向进行加固 ...

  10. Unity3D 从入门到放弃(五)----射箭游戏

    Unity3D 从入门到放弃(五) --射箭游戏 填坑啊填坑,每周都补上周作业,啥时候才能到头啊= = 作业需求 游戏规则: 设计一个射箭小游戏,点击鼠标射箭:  靶对象为 5 环,按环计分:  ...

最新文章

  1. rar for linux缺少GLIBC_2.7
  2. python程序控制电脑开机_Python3.4实现远程控制电脑开关机
  3. JQuery事件绑定,bind与on区别
  4. 人形AI捉迷藏惊煞网友:飞檐走壁纯靠自学,表情丰富还会合作,姚班学霸吴翼参与...
  5. 让人生成功的49个细节
  6. java map 元素个数_Java 小模块之--统计字符串中元素个数
  7. shell脚本练习实例
  8. Python实现共现语义网络
  9. InstallShield2022程序构建可靠
  10. 2017年最牛逼的分类Android项目源码免费一次性打包下载!
  11. TP-LINK设备如何配置无线上网短信Wifi认证?
  12. php论坛制作教程,Discuz论坛专题页面制作教程
  13. ALOS卫星轨道插值并绘制轨道
  14. 学习要趁早年轻要挣钱
  15. 即时通讯开发,聊天软件搭建
  16. 服务器开机必须要按f1才能进系统,为什么开机要按f1才能进系统
  17. excel不显示提示对话框
  18. 对于国内数据交换平台的分析
  19. Android Gson解析json详解
  20. 彻底搞懂 字符 编码 GBK 和 UTF8

热门文章

  1. Chfs 文件共享工具
  2. 贾扬清谈云原生 - 让数据湖加速迈入3.0时代
  3. gcc cross compiler 问题
  4. Scanner类、Random类、ArrayList 类
  5. EBS 使用API更新物料属性 Inv_Item_Grp
  6. VBA学习笔记4:将同一文件下的多个工作簿的数据汇总为一个工作表
  7. 崔天翼的找工作总结 zz
  8. android xposed 简书,Xposed 入坑篇
  9. 《人性的弱点》观后感
  10. 关于十六进制发送和显示(VS上位机和下位机)