Как помешать proguard сжать библиотеку модулей?JAR - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть библиотека fishwjy videocompressor, которую я импортирую в свой проект. Все нормально, когда я запускаю код для сжатия видео в режиме отладки, но я получаю ошибку, когда запускаю сжатие видео после сборки apk в режиме выпуска.ProGuard?и как я могу решить эту проблему? и как сохранить модуль от proguard?

мой build.gradle

buildTypes {
        release {
            lintOptions {
                disable 'MissingTranslation'
                checkReleaseBuilds false
                abortOnError false
            }
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

мои правила proguard

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Android/AndroidSdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keep class com.woxthebox.draglistview.** { *; }
-keep class com.vincent.videocompressor.** { *; }
-keepclassmembers com.vincent.videocompressor.** { *; }
-keep class videocompressor.**
-keepclassmembers videocompressor.**

-keep public class com.vincent.videocompressor.** {
  public protected *;
}
-keep public class videocompressor.** {
  public protected *;
}

Это ошибка, я получил в режиме релиза

java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:354)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/aspectj/runtime/reflect/Factory;
    at com.coremedia.iso.boxes.FileTypeBox.ajc$preClinit(FileTypeBox.java:1)
    at com.coremedia.iso.boxes.FileTypeBox.<clinit>(FileTypeBox.java:1)
    at com.vincent.videocompressor.MP4Builder.createFileTypeBox(MP4Builder.java:155)
    at com.vincent.videocompressor.MP4Builder.createMovie(MP4Builder.java:62)
    at com.vincent.videocompressor.VideoController.convertVideo(VideoController.java:341)
    at com.vincent.videocompressor.VideoCompress$VideoCompressTask.doInBackground(VideoCompress.java:51)
    at com.vincent.videocompressor.VideoCompress$VideoCompressTask.doInBackground(VideoCompress.java:32)
    at android.os.AsyncTask$2.call(AsyncTask.java:333)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    ... 4 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.aspectj.runtime.reflect.Factory" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.myapps.myapps-rN2AAoto-QpoZhVaUg_EFQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.myapps.myapps-rN2AAoto-QpoZhVaUg_EFQ==/lib/arm64, /system/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    ... 13 more

1 Ответ

0 голосов
/ 26 сентября 2019

use -dontshrink

от proguard manual

-dontshrink Указывает не сжимать ввод.По умолчанию ProGuard сжимает код: он удаляет все неиспользуемые классы и члены класса.Он сохраняет только те, которые перечислены различными опциями -keep, и те, от которых они зависят, прямо или косвенно.Он также применяет шаг сжатия после каждого шага оптимизации, поскольку некоторые оптимизации могут открыть возможность удалять больше классов и членов класса.

...