> 文档中心 > android framework手机系统改机相关知识简单方案

android framework手机系统改机相关知识简单方案

hi粉丝朋友们大家好!
近来有些粉丝朋友问我改机相关怎么玩,其实这个我一直觉得有点拿不出台面,害怕大家干坏事。。。哈哈,也许我想多了,我是个程序员技术上研究而已,我自己不干坏事就行。

android手机改机其实是一个比较偏门的领域,但是市场需求好像还比较大,比如很多那种群控工作室。

1、主流改机方案

在这里插入图片描述

主要有2种:
1.静态改机即这种就和我们手机一样,刷入出厂厂商就有机型等信息,刷入就不可以改变,这种改变的就是 系统机型相关ro类型的prop,需要改变只能重新编译代码修改
都以小米5的lineage版本(这个搭建可以百度)为例子
这种修改方式:
到device路径mk文件找到定义PRODUCT相关宏进行修改
device/xiaomi/gemini/lineage_gemini.mk

# Device identifier. This must come after all inclusions.PRODUCT_NAME := lineage_geminiPRODUCT_DEVICE := geminiPRODUCT_BRAND := XiaomiPRODUCT_MODEL := MI 5  #这里PRODUCT_MODEL其实最后会经过编译系统转变成ro.product.modelPRODUCT_MANUFACTURER := XiaomiPRODUCT_GMS_CLIENTID_BASE := android-xiaomiPRODUCT_BUILD_PROP_OVERRIDES += \    PRODUCT_NAME="gemini" \    PRIVATE_BUILD_DESC="gemini-user 8.0.0 OPR1.170623.032 V9.6.1.0.OAAMIFD release-keys"# Set BUILD_FINGERPRINT variable to be picked up by both system and vendor build.propBUILD_FINGERPRINT := "Xiaomi/gemini/gemini:8.0.0/OPR1.170623.032/V9.6.1.0.OAAMIFD:user/release-keys"TARGET_VENDOR := Xiaomi

这里举个例子进行讲解:
PRODUCT_MODEL := MI 5 #这里PRODUCT_MODEL其实最后会经过编译系统转变成ro.product.model
所以这里我们就把MI 5可以自己修改成xxxx
然后在进行重新编译

2.动态改机,这种就是系统可以随时改变自己手机当前机型(当然只是针对应用层面),真实的prop并没有改变,但是应用获取prop都是需要通过系统接口,我们对系统接口进行hook,改变他的的返回值为我们设定机型既可以达到

在这里插入图片描述

这种思路就是只能“”骗“”第三方这种应用程序,实际上系统的ro相关prop没有变化,只是app获取我们手机版本机型等都是需要相关的接口,比如获取手机型号app只能用java类的如下接口:
Build.MODEL --这个就是型号其实它本质getString(“ro.product.model”);即获取ro.product.mode的属性:
我们思路就是改变这个getString方法,识别到如果是获取我们要修改的属性,我们就固定返回我们设置好的值如我们把 型号为 MI 5变成 MI 10:

 @UnsupportedAppUsage    private static String getString(String property) { if ("ro.product.model".equals(property)) {     return "MI 10";//固定返回MI 10 } return SystemProperties.get(property, UNKNOWN);    }

修改效果如下:
在这里插入图片描述

这样就实现了一个简单的Hook,当然实际我们还需要想办法让返回"MI 10"变成我们可以让一个专门改机的Apk进行设置,这个部分就方法比较多了,比如这里可以通过跨进程通讯调用获取,或者我们统一写入系统的某个Setting值然后Build.java进行读取解析,这个就不用在展示代码了属于应用层面东西。

在这里插入图片描述