Действительно ли Proguard чувствителен к регистру в плагине Gradle 3.2.1? - PullRequest
0 голосов
/ 22 января 2019

Привет, ребята trying Я пытаюсь обновить плагин gradle 3.2.1 для своей команды , Я столкнулся со странной проблемой “« ClassNotFoundException », как показано ниже:

-22 21:09:20.881 10523-10523/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.testproguard, PID: 10523
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/example/testproguard/b$a;
    at com.example.testproguard.MainActivity.onCreate(MainActivity.java:15)
    at android.app.Activity.performCreate(Activity.java:6100)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2614)
    at android.app.ActivityThread.access$800(ActivityThread.java:178)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5643)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.testproguard.b$a" on path: DexPathList[[zip file "/data/app/com.example.testproguard-2/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
    at com.example.testproguard.MainActivity.onCreate(MainActivity.java:15) 
    at android.app.Activity.performCreate(Activity.java:6100) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2614) 
    at android.app.ActivityThread.access$800(ActivityThread.java:178) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) 
    at android.os.Handler.dispatchMessage(Handler.java:111) 
    at android.os.Looper.loop(Looper.java:194) 
    at android.app.ActivityThread.main(ActivityThread.java:5643) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
    Suppressed: java.lang.ClassNotFoundException: com.example.testproguard.b$a
    at java.lang.Class.classForName(Native Method)
    at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
    at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 15 more
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

Я очень стараюсь найти корневой регистр ately к счастью , Я нахожу кого-то определяющего два внутренних статических класса с именами 'WWS' и 'Wws'。 Среди двух глупых классов , ”Wws“ использовался внешними классами , но «WWS» никогда не использовался , как показано ниже:

public final class ServerUtils {

public ServerUtils() {
}

public static class ABC {
    public static final String PATH = "xxxx/xxx/";

    public static String getHost() {
        return HostGenerator.getHost("" + PATH);
    }
}

public static class WWS {
    public static final String PATH = "xxxx/xxxx/";

    public static String getHost() {
        return HostGenerator.getHost("" + PATH);
    }
}



public static class Wws {
    public static final String PATH = "xxxx/xxxx/";

    public static String getHost() {
        Log.d(PATH, PATH);
        PackageInfo packageInfo = new PackageInfo();
        packageInfo.packageName = "ttttt";
        return HostGenerator.getHost("" + PATH) + packageInfo.packageName + ServerUtils.class.getCanonicalName() + ServerUtils.Wws.class.getCanonicalName();
    }
} }

Вот весь мой файл proguard

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-keepattributes *Annotation*,InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-dontoptimize
-ignorewarnings

Этот код отлично работает в режиме отладки и плагине Gradle 2.3.3, но не работает, когда я пытаюсь сделать сборку релиза с помощью proguard。

Я пытаюсь установить »android.enableR8 = false« , но не работает

Я подозреваю, что при сокращении кодов Proguard find он обнаружил, что "WWS" не использовался, поэтому он удаляет "WWS" и , неправильно "удаляет" Wws " Действительно ли Proguard чувствителен к регистру в плагине Gradle 3.2.1? или это ошибка в новом плагине Gradle?

...