三星手机语音测试软件,三星语音助手隐藏功能的分析与hook
本帖最后由 回不去的時光 于 2020-3-23 22:06 編輯
明明是原創,純手打,也被移動到分享區,吾愛管理員的腦袋是不是都被門卡過。。。目的:實現三星Bixby在播放音樂時,也可以喚醒語音助手
三星手機軟件都是通用的,也就是說三星軟件都是一樣的,只是在代碼里判斷機型,隱藏掉一些功能罷了
我今晚要實現一個功能就是: S10在播放音樂時,Bixby語音助手也可以黑屏語音喚醒
分析過程很漫長:
1.首先是拿到三個關鍵包(一般語音助手也就一個,想不懂三星搞那么多干啥)
Bixby 服務_2.3.02.0
Bixby 語音_2.3.02.0
語音喚醒_2.1.16.16
2.搜索關鍵詞【喚醒】
在res里搜到【即使手機揚聲器正在播放鈴聲、鬧鐘或媒體音樂,您依舊可以使用語音喚醒 Bixby】
進一步分析到【settings_voice_wakeup_allow_media_option】然后搜索id(沒結果)、只能跟蹤布局來定位位置
布局:settings_wakeup_preferences.xml
這里布局也沒啥給力的button等有關的id可以分析,只能搜關鍵詞【key_set_media_option_voice_command】
3.在Bixby 語音包里來到了
com.samsung.android.bixby.settings.wakeup.VoiceWakeupOptionsFragment
上下文分析下,得到一些比較有用的東西
if (WakeupUtil.isTablet()) {
this.mSetMediaOptionVoiceCommand.setTitle(R.string.settings_use_when_tablet_speaker_playing_title);
description = getString(R.string.settings_use_when_tablet_speaker_playing_summary);
}
this.mSetMediaOptionVoiceCommand.setSummary((CharSequence) description + " " + getString(R.string.settings_voice_wakeup_allow_media_option_message_2));
if (WakeupUtil.isMediaSupported()) {
this.mSetMediaOptionVoiceCommand.setOnPreferenceChangeListener(this);
} else {
removePreference(this.mSetMediaOptionVoiceCommand);
this.mSetMediaOptionVoiceCommand = null;
}
this.mChangeVoiceCommand = findPreference("key_change_voice_command");
if (WakeupUtil.isCustomWakeupSupported(getContext())) {
this.mChangeVoiceCommand.setOnPreferenceClickListener(this);
} else {
Preference pc = findPreference("key_category_wakeup_command");
removePreference(this.mChangeVoiceCommand);
removePreference(pc);
this.mChangeVoiceCommand = null;
}
this.mSetVoiceUnlock = (SwitchPreferenceCompat) findPreference("key_set_unlock_phone_option_voice_command");
setVoiceUnlockSummary();
if (WakeupUtil.isVoiceUnlockSupported(getContext())) {
this.mSetVoiceUnlock.setOnPreferenceChangeListener(this);
return;
}
isVoiceUnlockSupported是否支持語音解鎖
isCustomWakeupSupported是否支持自定義喚醒詞
我要的播放音樂時,也可以喚醒語音助手就是isMediaSupported
反編譯改包是有驗證的,不只是簽名驗證(過掉了),改包后包都起不來,有其他驗證,沒再去深究
直接寫xposed模塊,hook這里,順便實現自定義喚醒詞
重啟手機,驗證效果
4.你以為成功了?
不是的,我們還是太天真了。ui選項是出來了,出現了【在手機揚聲器播放時使用】的選項,但是勾選后,退出進來又是沒勾選的狀態。
來吧,繼續跟蹤代碼分析唄,一直分析這個函數到機型,SM-A505
public static boolean isMediaSupported() {
return 1 != getBargeInConfig();
}
public static int getBargeInConfig() {
int config = SemFloatingFeature.getInstance().getInt("SEC_FLOATING_FEATURE_BIXBY_CONFIG_BARGEIN_FUNCTION", 0);
if (isA50Device()) {
config = 1;
}
LogVoiceFw.d(TAG, "getBargeInConfig:" + config, new Object[0]);
return config;
}
private static boolean isA50Device() {
return Build.MODEL.contains("SM-A505");
}
最終是看到 SEC_FLOATING_FEATURE_BIXBY_CONFIG_BARGEIN_FUNCTION,這是個Feature特征
SemFloatingFeature這個是三星自己的framework的jar包
跟蹤無結果,想到以前搞過中興ZTE語音助手,想起來有個詞:雙麥克風降噪
在其他bibxy兩個包里搜關鍵詞【SEC_FLOATING_FEATURE_BIXBY_CONFIG_BARGEIN_FUNCTION】
在語音喚醒這個包里搜到很關鍵的函數com.samsung.android.voicewakeup.VoiceWakeupInfo??isAecWakeupEnabled 這是回聲消除的判斷函數了,TAG是VoiceWakeupInfo
如果不支持回聲消除的機型,是不能在播放音樂時語音喚醒的,hook,打印原返回值,果然是不支持,強制返真,搞定,測試成功
很晚了,該睡覺了,
其他隱藏功能比如自定義語音喚醒詞,甚至別人的語音,直接喚醒解鎖手機都可以實現
今晚主要是為了想要一個聽音樂可以直接語音換歌,Bixby只支持網易云音樂的操作,明晚再把網易云音樂搞搞,廣告太多了,下載還收費。。。
總結
以上是生活随笔為你收集整理的三星手机语音测试软件,三星语音助手隐藏功能的分析与hook的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java gdal_2、JAVA集成GD
- 下一篇: 迅雷导入未完成下载失败