我在Android应用程序中使用proguard。需要添加它以使代码混淆并且难以进行逆向工程。
我在导出apk时遇到此问题。即使我使用-dontskipnonpubliclibraryclassmembers
,Proguard也会低于警告。我不确定我需要做些什么来解决这个问题。
请提前协助并表示感谢。
[2014-08-14 15:48:28 - ] Warning: com.example.android.PaymentGateway: can't find referenced field 'int container_pg' in class com.example.android.R$id
[2014-08-14 15:48:28 - ] Warning: com.example.android.PaymentGateway$RetrieveEncKey: can't find referenced field 'int container_pg' in class com.example.android.R$id
[2014-08-14 15:48:28 - ] You should check if you need to specify additional program jars.
[2014-08-14 15:48:28 - ] Warning: there were 2 unresolved references to program class members.
[2014-08-14 15:48:28 - ] Your input classes appear to be inconsistent.
[2014-08-14 15:48:28 - ] You may need to recompile them and try again.
[2014-08-14 15:48:28 - ] Alternatively, you may have to specify the option
[2014-08-14 15:48:28 - ] '-dontskipnonpubliclibraryclassmembers'.
[2014-08-14 15:48:28 - ] java.io.IOException: Please correct the above warnings first.
[2014-08-14 15:48:28 - ] at proguard.Initializer.execute(Initializer.java:321)
[2014-08-14 15:48:28 - ] at proguard.ProGuard.initialize(ProGuard.java:211)
[2014-08-14 15:48:28 - ] at proguard.ProGuard.execute(ProGuard.java:86)
[2014-08-14 15:48:28 - ] at proguard.ProGuard.main(ProGuard.java:492)
答案 0 :(得分:5)
来自Proguard troubleshooting guide:
您编译的类文件与库不一致。你可能需要 重新编译类文件,或以其他方式将库升级到一致的版本。
[...]
如果您正在为Android开发,ProGuard会抱怨它无法解决问题 找到仅在最近版本中可用的方法 Android运行时,您应该更改您的构建目标 project.properties文件或build.gradle文件到该最新版本。 您仍然可以指定不同的minSdkVersion和不同的 AndroidManifest.xml文件中的targetSdkVersion。
如果您无法以这种方式解决问题,可以尝试-dontwarn com.example.android.R$id
并查看您的应用程序是否运行尽管有警告,有时也是如此。