Управление Proguard для похудения методов в Android - PullRequest
0 голосов
/ 09 июня 2011

Я использую Eclipse и встроенную версию ProGuard, включенную в последнюю версию Android, пытаясь запутать мое приложение для Android, но оно продолжает удалять важные методы.Я попытался отредактировать файл proguard.cfg, чтобы сохранить методы, введя различные исключения, например:

  • keep public void myMethod (String myString)

  • сохранить открытый класс myInterface

  • сохранить открытый класс com.help.app.myInterface. **

, но ни один из них не являетсяза работой.Когда я смотрю в файле Use.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 (по умолчанию, за исключением трех 'keep' вблизи)в середине):

-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, так как на самом деле не хочу, чтобы мой код урезался ... но, увы, он все равно сжимается.Я также пробовал столько вариаций, сколько могу придумать, в течение нескольких часов подряд, но ничто не спасает мои методы.

Как мне спасти мой "donDontDeleteMePlease" от гнева ProGuard?Что мне нужно ввести в этот файл proguard.cfg, чтобы он мне понравился?

1 Ответ

1 голос
/ 10 июня 2011

Это должно работать:

-keep class com.whoiam.whatido.MainClass$myInterface {
  public void dontDeleteMePlease(java.lang.String);
  public void leaveMeBe(java.lang.String);
}

Обратите внимание, что внутренний класс указан с $ и что он не является общедоступным.

Дополнительную информацию и примеры вы можете найти в руководстве ProGuard .

...