我正在使用Eclipseand内置于最新安卓版本的ProGuard,试图混淆我的安卓应用程序,但它一直在删除重要的方法。我已尝试编辑proguard.cfg文件以保留方法,方法是键入各种排除,如
但这些都不起作用。当我查看usage.txt文件时,方法仍然存在,我的应用程序无法工作。我不明白我做错了什么。我会感谢你的帮助。
这是我们班的样子
package com.whoiam.whatido;
public class MainClass extends Activity {
......
public void onCreate(Bundle savedInstanceState) {
....
}
....
....
final class myInterface {
myInterface() {}
public void dontDeleteMePlease(String message) {
....
}
public void leaveMeBe(String message) {
...
}
.....
}
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view) {
....
}
}下面是我的proguard.cfg文件的一个示例(除了中间的三个“保存”之外,它是默认的):
-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 com.android.vending.licensing.ILicensingService
-keep public class com.whoiam.whatido.myInterface.**
-keep public class com.whoiam.whatido.myInterface.** {
<methods>;}
-keep public void leaveMeBe(String message);
-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 *; }我也尝试过-dontshrink,因为我不希望我的代码被剪切.但遗憾的是,它还是缩小了。我也尝试了尽可能多的变化,我能想到的连续几个小时,但没有任何东西,除了我的方法。
我如何从ProGuard的愤怒中拯救我的"donDontDeleteMePlease“?我需要在proguard.cfg文件中键入什么才能使它像我一样?
发布于 2011-06-09 22:30:47
这应该是可行的:
-keep class com.whoiam.whatido.MainClass$myInterface {
public void dontDeleteMePlease(java.lang.String);
public void leaveMeBe(java.lang.String);
}注意,内部类是用$指定的,并且它不是公共的。
您可以在ProGuard手册中找到更多的信息和示例。
https://stackoverflow.com/questions/6292663
复制相似问题