小米相机修改&移植教程(基于 6.x 系列):机型配置文件详解
相机
以下内容基于小米6.x系列相机
注:
类名中存在一个类的类名含有“$a”,而类名前部分相同且不含“$a”的为底配置文件
可任意修改命名底配置文件
以下以atpcommon和atpcommon$a为例
类名由机型代号经过混淆的类为机型配置文件,跳过混淆后可直接以机型代号命名类
以下所有底配置文件调用修改均可在对应机型代号的类中进行,机型配置文件优先级>底配置文件
如某功能support方法调用为
1 | invoke-virtual {p0}, Latpcommon;->D6()Z |
则D6()Z为此功能对应配置方法名,要开启此功能
(以D6()Z为例,先在机型配置文件搜索是否有D6()Z,有则可以直接改const/4 p0, 0x0中0x0为0x1,没有则添加)
在机型配置文件virtual methods下添加
1 | .method public D6()Z |
当前版本署名
packageInfo().versionName字符串后
move-result-object v3后添加
Base64编码
1 |
|
以上为参考内容
1 | new-instance v4, Ljava/lang/StringBuilder; |
固定机型配置
搜索字符串ro.debuggable
上方有sget-object v0, Landroid/os/Build;->DEVICE:Ljava/lang/String;的类中
在sget下行添加
1 | const-string v0, "机型代号" |
引号内为要固定的机型代号,如mondrian
跳过混淆
搜索()Latpcommon
atpcommon为底配置文件
跳转并增加一个寄存器,在第一个cond后添加
1 | sget-object v1, Landroid/os/Build;->DEVICE:Ljava/lang/String; |
固定机型水印信息
配置文件c()方法内
删除从const-string v2到
第一个含move-result-object v2的行
即仅删除前两个混淆了的内容
改成
1 | const-string/jumbo v2, "REDMI" |
AI智能推荐
AI文档建议
文档建议仅禁用实时提取文本生效
搜索字符串
pref_camera_ai_detect_doc
doc观察cond跳转和条件判断
识别二维码
pref_scan_qrcode_key
超清模式相册智能构图
pref_camera_crop_preferred_key
上方底配置文件调用
关闭人像超清按钮
搜索字符串pref_portrait_repair_enabled_key_
类中第一个方法赋值改为0x0
畸变矫正
搜索字符串pref_camera_ultra_wide_ldc_key
CameraCapturePreferenceFragment类
跳转上方的invoke-virtual底配置文件调用
杜比视界
字符串搜索isTrueColourVideoSupported
跳转下方的invoke-virtual底配置文件调用
音源追焦
关闭new(杜比,HDR10)追焦
搜索字符串pref_ai_audio_3d
const-string/jumbo定义处
下方invoke-virtual的调用跳转返回0x0
(修复开启后闪退)
需要系统prop存在
ro.vendor.audio.zoom.type属性(否则开启后相机闪退)
ro.vendor.audio.zoom.type=2
字符串搜索ro.vendor.audio.zoom.type可查看相关判断
解锁拍照超高质量
arsc搜索超高并复制资源值,在dex搜索资源值
或搜索字符串getContext().resources.g…_jpegquality_entryvalues)
资源值上方&字符串下方
invoke-virtual调用跳转返回0x1
启用实验室选项
搜索camera.lab.options
返回0x1
解锁4K60帧
类似.method public static s(IILz9/d;)Z
搜索字符串
empty buffer或invalid buffer length
定位到方法
寄存器后第一个0x0
赋值0x1
修复慢动作960/1920fps闪退及绿屏
isSelfDevelopedAlgorithm方法
位于SlowMotionModule类
跳转下方的invoke-virtual底配置文件调用返回0x0
视频提词器功能
搜索字符串pref_video_prompter_key
下方isSwitchOn方法
内invoke-virtual调用
视频超级防抖
字符串super_eis
const-string/jumbo v2定义处
上方invoke-static调用
再跳转第一个invoke-virtual调用
第一个底配置文件调用判断是否支持超级防抖
第二个底配置文件调用判断是否支持超级防抖PRO
主摄默认焦距入口
搜索字符串isSupportedSwitchZoomButton
ZoomRatioToggleView类
下方invoke-virtual的调用跳转
人像半身全身按钮
搜索字符串pref_ultra_wide_bokeh_enabled
位于ZoomRatioToggleView类
上方invoke-virtual的调用跳转
设置测光权重入口
搜索字符串pref_metering_weight
CameraCapturePreferenceFragment类中
上方invoke-static {v2}调用
添加悬浮快门键拍照
搜索字符串pref_suspend_shutter_button
CaptureMethodFragment类中
上方invoke-virtual的调用跳转
运动抓拍按钮
搜索字符串pref_camera_ai_shutter_key
CameraCapturePreferenceFragment类中
上方invoke-virtual的调用跳转
专业模式RAW开关
dex反编译搜索ProModuleEntry类
getModeUI方法invoke-direct跳转
跳转后搜索getRawItemBuilder
上方invoke-static处跳转
support方法invoke-virtual调用
前后多摄
DualCamModuleEntry类
getModule方法,跳转下方invoke-virtual的调用
再跳转底配置文件调用
禁用后为前后双景
部分功能类名
类名搜索ModuleEntry可查看更多,类中通常有support方法判断支持,getModuleId方法注明模式id(如人像模式id为0xab),id可用于机型配置文件中SparseArray各模式快捷焦段配置
多机互联
CinemasterModuleEntry类
电影模式
CinematicModuleEntry类
超清模式
PixelModuleEntry类
帮拍
FriendModuleEntry
化妆镜
CosmeticMirrorModuleEntry
相机隐私政策
https://privacy.mi.com/all/%s_%s
去除浏览器跳转
字符串搜索privacy.mi.com/all
把:try_start行到:catch行删除
徕卡相关
徕卡界面
WatermarkTypePreference类
watermark_film和watermark_leica字符串的方法内
invoke-virtual调用
0x0徕卡
0x3胶片
解锁更多快门声音
需徕卡界面为前置条件
搜索字符串pref_custom_sound_tips_key
下方invoke-virtual的调用跳转返回0x1



