相机

以下内容基于小米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
2
3
4
5
.method public D6()Z
.registers 1
const/4 p0, 0x1
return p0
.end method

当前版本署名

packageInfo().versionName字符串后
move-result-object v3后添加
Base64编码

1
2

Ver:XXXXXXXX丨Mod:AetherPX

以上为参考内容

1
2
3
4
5
6
7
8
9
10
11
12
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v5, "编码内容"
const/4 v6, 0x0
invoke-static {v5, v6}, Landroid/util/Base64;->decode(Ljava/lang/String;I)[B
move-result-object v5
new-instance v6, Ljava/lang/String;
invoke-direct {v6, v5}, Ljava/lang/String;-><init>([B)V
invoke-virtual {v4, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3

固定机型配置

搜索字符串ro.debuggable
上方有sget-object v0, Landroid/os/Build;->DEVICE:Ljava/lang/String;的类中
在sget下行添加

1
const-string v0, "机型代号"

引号内为要固定的机型代号,如mondrian

跳过混淆
搜索()Latpcommon
atpcommon为底配置文件
跳转并增加一个寄存器,在第一个cond后添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sget-object v1, Landroid/os/Build;->DEVICE:Ljava/lang/String;
:try_start_8
invoke-static {v1}, Lse/c;->a(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Class;->newInstance()Ljava/lang/Object;
move-result-object v2
check-cast v2, Latpcommon;
sput-object v2, Lot/c;->d:Latpcommon;
sget-object v2, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
sput-object v2, Lot/c;->c:Ljava/lang/Boolean;
sget-object v2, Lot/c;->d:Latpcommon;
return-object v2
:try_end_1b
.catch Ljava/lang/ClassNotFoundException; {:try_start_8 .. :try_end_1b} :catch_1c
.catch Ljava/lang/IllegalAccessException; {:try_start_8 .. :try_end_1b} :catch_1c
.catch Ljava/lang/InstantiationException; {:try_start_8 .. :try_end_1b} :catch_1c
:catch_1c

固定机型水印信息

配置文件c()方法内
删除从const-string v2到
第一个含move-result-object v2的行
即仅删除前两个混淆了的内容
改成

1
2
3
4
const-string/jumbo v2, "REDMI"
const/4 v3, 0x0
aput-object v2, v1, v3
const-string v2, "NOTE 12 TURBO"

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