簡體   English   中英

如何在Android上使用Proguard並保護應用程序的功能完整性?

[英]How to use Proguard with Android and protect the app's functional integrity?

我使用下面的Proguard配置構建了一個Ant,該配置是由“ android”命令行工具生成的,看起來很簡單。 但是,當我使用此腳本構建應用程序時,該應用程序在設備上執行時會崩潰,並帶有一系列空指針異常(混淆過程以某種方式向代碼中添加了錯誤)。 要修復該應用程序,我無需通過Proguard運行它即可對其進行重建。

您將為使用Proguard和Android應用程序的用戶提供什么建議,以便a)在合理程度上優化和混淆了該應用程序,但是b)在不損害功能完整性的情況下?

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

我找到了針對我所遇到的特定案例的解決方案。 我會記錄該解決方案,因為我懷疑其他人可能會發現它有用。

我有兩個專門用於保存往返JSON API調用的有效負載的類。 我沒有從混淆中排除這些類,所以GSON解析器無法正確創建對象,因為類成員名稱與JSON參數名稱不匹配。

因此,本故事的寓意是,當使用GSON或其他將JSON參數名稱與類成員名稱匹配的工具反序列化JSON數據以創建對象時,請確保Proguard不重命名它們。 我看到的null引用異常是因為所有反序列化的對象均為空白。

我應該說我沒有遇到ClassNotFoundException,這是一個不同的問題,最初看起來像莫名其妙的運行時錯誤,只是一個有趣的假設組合。

只需遵循“ 配置Pro-guard”部分中列出的規則。 關鍵是對xml中的類的任何引用。 因此,如果清單中有未在代碼中明確使用的任何接收方或服務,則Proguard可能會將其刪除。 這也包括布局中的類,例如“自定義”視圖等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM