我有和Android應用程序,其中不同的人測試開發構建和發佈構建。開發版本不會被混淆,我希望能夠在運行時以編程方式確定應用程序是否已被混淆。如何以編程方式確定Android應用程序是否被模糊處理?
有沒有辦法做到這一點?
我有和Android應用程序,其中不同的人測試開發構建和發佈構建。開發版本不會被混淆,我希望能夠在運行時以編程方式確定應用程序是否已被混淆。如何以編程方式確定Android應用程序是否被模糊處理?
有沒有辦法做到這一點?
下面是一個想法:在您的代碼庫中添加一個根本不用的類。 Proguard會混淆和/或刪除它。因此,如果已通過ProGuard運行,則通過應用程序中的反射加載它應該會導致ClassNotFoundException
。
由於@Sean提出使用一個沒有(外部)依賴關係的類。
但要注意,ProGuard的可檢測使用反射,所以你必須以某種方式從字符串名稱加載類,不使用一個字符串(文本資源也許?):http://proguard.sourceforge.net/index.html#/FAQ.html%23forname
這是正確的,因爲ProGuard會忽略R文件。那是我想到的方法,因此我之前的評論大聲笑 – rf43
我不確定我明白你的意思嗎?在字符串資源文件中硬編碼未使用的類名稱? –
是的。或者使用任何其他動態方式生成一個字符串。 –
選擇它總是改名類由混淆之後由Proguard。它的名字是ExampleClass.java
在下面的代碼。在運行系統中使用以下行檢查其名稱:
ExampleClass.java
...
public static final boolean OBFUSCATED = !ExampleClass.class.toString().contains("ExampleClass");
就是這樣。沒有助手類或方法是必需的,並且沒有引起異常。
在我看來,我認真地試圖找到這個嘗試的缺陷......我只是不能這樣做。這不會經常發生......優秀的答案先生!大聲笑 – rf43
有一個警告 - 閱讀我的答案。 –
我站在(有點)更正:) – rf43