iT邦幫忙

1

Android 透過adb setprop 對手機設定參數,讓你的APP可以動態開啟隱藏功能

  • 分享至 

  • xImage
  •  

有時候可能為了開發使用,但又不想要讓所有使用者看到該功能,這時候該怎麼辦,也許可以模仿連續點選某處10次,或者輸入什麼神秘密碼的方式在app中,但除了這些方法外,是否還有什麼更科技一點的方式呢?

透過adb setprop

參考firebase 設定debugApp的一個方式,可以透過

adb shell setprop debug.firebase.analytics.app com.packageName

來進行設定開啟某一個app的debug資訊上傳,於是乎就想到是不是這樣就代表可以對手機寫入一個動態設定呢? 而這個設定是重開機後就不見的

問了一下chatgpt後進行設定

adb shell setprop debug.hidden_feature_enabled true

可以看到是這樣

adb shell setprop {key} {value}

透過

adb shell getprop

就可以看到他列出了系統所有的prop

[debug.atrace.tags.enableflags]: [0]
[debug.c2.use_dmabufheaps]: [1]
[debug.force_rtl]: [false]
[debug.hidden_feature_enabled]: [true]
[debug.hwc.winupdate]: [1]
[debug.hwui.use_hint_manager]: [true]
[debug.renderengine.backend]: [skiaglthreaded]
[debug.sf.dim_in_gamma_in_enhanced_screenshots]: [1]
[debug.sf.disable_backpressure]: [0]
[debug.sf.early.app.duration]: [16600000]
[debug.sf.early.sf.duration]: [16600000]
[debug.sf.earlyGl.app.duration]: [16600000]
[debug.sf.earlyGl.sf.duration]: [16600000]
[debug.sf.enable_adpf_cpu_hint]: [true]
[debug.sf.enable_gl_backpressure]: [1]

就可以看到剛剛的

[debug.hidden_feature_enabled]: [true] true

App中怎麼獲得這個資訊?

我寫了這個method

private fun readRuntimeProperty(key: String,execute: (String) -> Unit) {  
    with(Runtime.getRuntime().exec("getprop $key")) {  
        BufferedReader(InputStreamReader(inputStream)).useLines {  
            execute(it.first())  
        }  
        destroy()  
    }  
}

因此可以直接透過

private fun main() {
	readRuntimeProperty("debug.hidden_feature_enabled") {  
	    toast("hasEnable:$it")  
	}
}

就可以得到設定的結果做動態的應用,譬如給你家的QA讓他透過ADB輸入後(或者寫成一個script),可以開啟一些特殊讓他測試用的介面或者功能

System.getProperty

另外你可能會提到System.getProperty(propertyName) 他是只會讀到build.prop中設定值,理論上這邊是系統資訊不可更改的區域

結論

可以用來作為快速的開關一些功能介面的隱藏指令,但建議不要把機密功能打開在裡面


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言