首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android系统中方法的控制升级减肥法

Android系统中方法的控制升级减肥法
EN

Stack Overflow用户
提问于 2011-06-09 12:17:59
回答 1查看 246关注 0票数 0

我正在使用Eclipseand内置于最新安卓版本的ProGuard,试图混淆我的安卓应用程序,但它一直在删除重要的方法。我已尝试编辑proguard.cfg文件以保留方法,方法是键入各种排除,如

  • 保持公共空myMethod(String myString)
  • 保持公共类myInterface
  • 保持公共类com.hel.app.myInterface。**

但这些都不起作用。当我查看usage.txt文件时,方法仍然存在,我的应用程序无法工作。我不明白我做错了什么。我会感谢你的帮助。

这是我们班的样子

代码语言:javascript
复制
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文件的一个示例(除了中间的三个“保存”之外,它是默认的):

代码语言:javascript
复制
-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文件中键入什么才能使它像我一样?

EN

回答 1

Stack Overflow用户

发布于 2011-06-09 22:30:47

这应该是可行的:

代码语言:javascript
复制
-keep class com.whoiam.whatido.MainClass$myInterface {
  public void dontDeleteMePlease(java.lang.String);
  public void leaveMeBe(java.lang.String);
}

注意,内部类是用$指定的,并且它不是公共的。

您可以在ProGuard手册中找到更多的信息和示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6292663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档