Подпись apk, приводящая к сбою в proguard enable

Я пытаюсь использовать proguard в моем приложении, установите для proguard значение true, и затем начинается проблема. Я импортирую lib, когда использую proguard, выполнив следующие действия. -keepnames class com.somepackage.* с моим именем пакета происходит сбой приложения, когда я пытаюсь использовать подписанный apk. Я знаю, что это глупый вопрос, но я застрял в этом в течение последних 5 часов и не смог найти легкого решения, так как я использую около 20 библиотек. Я следовал за этим также. Плз, направьте меня в этом, как я могу это сделать?

Это мой код класса правил proguard

-keepnames class beatbox.neelay.dummybeat.*
-keepnames com.srx.widget.*
-keepnames de.hdodenhof.circleimageview.CircleImageView.*
-keepnames com.bumptech.glide.*
-keepnames com.romainpiel.shimmer.*
-keepnames com.vansuita.gaussianblur.GaussianBlur
-keepnames com.antonyt.infiniteviewpager.InfinitePagerAdapter
-keepnames com.antonyt.infiniteviewpager.InfiniteViewPager
-keepnames com.eftimoff.viewpagertransformers.CubeOutTransformer
-keepnames com.ms.square.android.glassview.GlassView
-keepnames me.alexrs.fontpagertitlestrip.lib.FontPagerTitleStrip

Я не могу сгенерировать любой подписанный apk сейчас. ошибка есть.

Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.

Задание не выполнено, подробности см. В журналах

любой намек будет полезен. консольный вывод

FAILURE: Build failed with an exception.
  • Что пошло не так: выполнение задачи не выполнено: app: transformClassesAndResourcesWithProguardForRelease.

    Задание не выполнено, подробности см. В журналах

  • Попробуйте: Запустите с параметром --stacktrace, чтобы получить трассировку стека. Запустите с параметром --info или --debug, чтобы получить больше вывода журнала.

Редактирование build.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
    applicationId "beatbox.neelay.dummybeat"
    minSdkVersion 16
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    renderscriptTargetApi 24
    renderscriptSupportModeEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    vectorDrawables.useSupportLibrary = true
}
lintOptions {
    checkReleaseBuilds false
    abortOnError false
}
buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

repositories {
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
maven { url 'http://Manabu-GT.github.com/GlassView/mvn-repo' }
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile project(':foldingtabbar')
compile 'com.android.support:appcompat-v7:25.2.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7'
compile 'com.android.support:design:25.2.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.intuit.sdp:sdp-android:1.0.4'
compile 'com.leo.simplearcloader:simplearcloader:1.0.1'
compile 'com.ms.square:glassview:0.1.0'
compile 'de.hdodenhof:circleimageview:2.1.0'
compile 'com.romainpiel.shimmer:library:1.4.0@aar'
compile 'com.github.StephenVinouze:ShapeView:1.1.0'
compile 'com.eftimoff:android-viewpager-transformers:1.0.1@aar'
compile 'com.github.antonyt:InfiniteViewPager:v1.0.0'
compile 'me.alexrs:font-pager-titlestrip:1.0.0'
compile 'com.github.florent37:arclayout:1.0.1'
compile 'com.android.support:cardview-v7:25.1.0'
compile 'com.android.support:support-v4:25.1.0'
compile 'com.github.jrvansuita:GaussianBlur:v1.0.2'
compile 'com.google.code.gson:gson:2.7'
compile 'com.android.support:support-vector-drawable:25.2.0'
testCompile 'junit:junit:4.12'
}

другой способ, которым я пытался для proguard-rule.pro

-keepnames class beatbox.neelay.dummybeat.**{*;}
-keepnames class com.srx.widget.**{*;}
-keepnames class de.hdodenhof.circleimageview.CircleImageView.**{*;}
-keepnames class com.bumptech.glide.**{*;}
-keepnames class com.romainpiel.shimmer.**{*;}
-keepnames class com.vansuita.gaussianblur.**{*;}
-keepnames class com.antonyt.infiniteviewpager.**{*;}
-keepnames class com.eftimoff.viewpagertransformers.**{*;}
-keepnames class com.ms.square.android.glassview.**{*;}
-keepnames class me.alexrs.fontpagertitlestrip.lib.FontPagerTitleStrip**{*;}

дерево зависимостей

5 ответов

Причина: не все классы или библиотеки оптимизированы с включенным Proguard, поэтому Proguard делает то, что он удаляет классы, если они не оптимизируют, что приводит к сбою и ошибкам в проекте.

Решение: в вашем файле proguard.cfg сохраните те классы или библиотеки, которые не поддерживаются progaurd. Попробуйте поймать все описанное здесь:
Попробуйте добавить:

-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }


Или, если вы используете v4 lib:

-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }


Если вы используете последнюю версию Android Studio, вы можете найти это как proguard-rules.pro


В вашем случае попробуйте также использовать -dontwarn с classname. Как и ваша ошибка показывает, что она не может оптимизировать круговую библиотеку. так что попробуйте добавить это также:

-dontwarn hdodenhof.**
-keep class hdodenhof.**


Если все еще не работает, то понизьте вашу библиотеку circleimageview:
compile 'de.hdodenhof:circleimageview:1.3.0' Это работает для меня.

1) Сохраняйте все аннотации

-keepattributes SourceFile,LineNumberTable,*Annotation*,EnclosingMethod,Signature,Exceptions,InnerClasses

2) Сохраните, если у вас есть какие-либо pojos или модели и классы, которые используются для сетевого вызова

Пример:

-keep class com.example.android.models.**
-keepclassmembers class com.example.android.models.** {
      *;
}
-keepclassmembers class com.example.android.network.** {
  public void set*(***);
  public *** get*();
  public *** is*();
}

3) Для всех библиотек, которые вы используете, соблюдайте правила proguard

Пример:

-dontwarn com.zl.reik.dilatingdotsprogressbar.**
-keep class com.zl.reik.dilatingdotsprogressbar.**{*;}
-keep interface com.zl.reik.dilatingdotsprogressbar.**{*;}

Вам даже нужно соблюдать аналогичные правила Proguard для "foldtabbar", так как это также библиотека

Если вышеуказанное решение не решает, run ./gradlew app:dependencies в свой репозиторий и пришлите мне список зависимостей

Наличие одинаковой версии для всех библиотек поддержки также очень важно. Иногда библиотеки имеют рекурсивные зависимости, каждая из которых имеет свою версию, что может привести к этой ошибке. Бежать:

./gradlew app:dependencies

чтобы увидеть зависимости для каждой библиотеки и проверить, все ли они имеют одинаковую версию. Я уже вижу, что вы используете версии вспомогательных библиотек 25.1.0 и 25.2.0. Кроме того, некоторые из ваших библиотек старые, поэтому они, вероятно, используют старые версии.

Попробуй использовать:

-keep class beatbox.neelay.dummybeat.**{*;}
-dontwarn beatbox.neelay.dummybeat.**

вместо:

-keepnames beatbox.neelay.dummybeat.**{*;}

Proguard удаляет классы, которые являются частью зависимостей, добавленных приложением. Постарайтесь сохранить их, используя:

-keep class hdodenhof.**
-keep class android.support.v4.** { *; }
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
-keep class android.support.v7.internal.** { *; }
-keep interface android.support.v7.internal.** { *; }

Отключить предупреждение для классов зависимостей:

-dontwarn hdodenhof.**
-dontwarn android.support.v4.**
-dontwarn android.support.v7.**

В вашем коде:

minifyEnabled true

Сделай это

 minifyEnabled false

Надеюсь, поможет:)

Другие вопросы по тегам