2016-07-15 4 views
0

В моем приложении я включил progurad by minifyEnabled true и правила progurad Я не добавил, я построил подписанный в apk, тогда он рушится в lauching только тогда, я подумал, что мне нужно добавить классы, которые не имеют быть ограниченным. затем я добавил правила progurd, такие как -keep public class * extends android.app.Activity, а затем он не работает, я не знаю, почему, потому что это зависит от других файлов, таких как представления и файлы R. Поэтому я сомневаюсь, что когда я включил progurad, я должен добавить все свои классы и библиотеки в правила progurad, или он будет минимизировать другие классы и сделать так, как не будет работать. Так что как я могу добавить все классы без сбоя приложения при его создании в apkПосле добавления в правила proguard также это приводит к сбою приложения. Добавьте в проект следующие правила ProGuard.Как ограничить приложение при сбое при сборке подписанного apk с minifyenabled true, означает применяемый прогурад?

> -keep public class * extends android.app.Activity 
> -keep public class * extends android.app.Application 
> -keep public class * extends android.support.v7.app.AppCompatActivity 
> -keep public class * extends android.content.BroadcastReceiver 
> -keep public class * extends android.content.ContentProvider 
> -keep public class * extends android.preference.Preference 
> -keep public class android.os.AsyncTask 
> -keep public class * extends android.view.View { 
>  public <init>(android.content.Context); 
>  public <init>(android.content.Context, android.util.AttributeSet); 
>  public <init>(android.content.Context, android.util.AttributeSet, int); } 
> -keepclasseswithmembers class * { 
>  public <init>(android.content.Context, android.util.AttributeSet); } 
> -keepclasseswithmembers class * { 
>  public <init>(android.content.Context, android.util.AttributeSet, int); } 
> -keepclassmembers class * extends android.content.Context { 
>  public void *(android.view.View); 
>  public void *(android.view.MenuItem); } 
> # The official support library. 
> -keep class android.support.v4.app.** { *; } 
> -keep interface android.support.v4.app.** { *; } 
> -keep class android.support.v7.app.** { *; } 
> -keep interface android.support.v7.app.** { *; } 
> -dontwarn android.support.** 

Как я могу проверить приложение с выпуска Proguard построить, есть что-нибудь, чтобы чек direclty подписал в APK или я должен добавить любые картографические файлы .Как можно проверить прямой APK версии или If что apk загрузится в playstore, тогда он будет работать на основе картографических файлов.

+1

этот вопрос имеет ответы, которые вам нужны: http://stackoverflow.com/questions/18259632/should-i-use-proguard – Bill

ответ

0

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

Так что мое решение после отпуская загрузки в АПК playstore и загрузить файл сопоставлений под сборкой \ выходы \ отображение \ выпуск \ mapping.txt файла в playstore так загрузить приложение из playstore, то он может работает , в файле сопоставления все классы сопоставления будут там. Так что в это время он не будет crash.uploading файл сопоставления в playstore https://support.google.com/googleplay/android-developer/answer/6295281?hl=en Я не пробовал, но если кто-нибудь попытается, то дайте мне знать, чтобы отредактировать ответ

0

В моем файле proguard все закомментировано, и оно отлично работает с minifyEnabled true. Пытались ли вы что-то вроде этого:

proguard-rules.pro:

# Add project specific ProGuard rules here. 
# By default, the flags in this file are appended to flags specified 
# in C:\Users\<yourUser>\AppData\Local\Android\Sdk/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 *; 
#} 

И мой Gradle выглядит следующим образом:

buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

Edit: Другие решения: https://stackoverflow.com/a/6492478

+0

У вас есть какая-либо подписанная версия apk, такая как сборка релиза, а затем в этой сборке происходит сбой – Hanuman

+0

Да, у меня нет выпускает подписанную копию выпуска ... – AZOM

+0

после выпуска сборки просто проверьте, работает ли она или нет (установите и проверьте) и проверьте размер отладки apk и release apk, он будет сильно отличаться – Hanuman

0

Это documentation просто сказал о Proguard.

Чтобы сделать ваш файл APK как можно меньшим, вы должны включить сокращение, чтобы удалить неиспользуемый код и ресурсы в своей сборке релизов. На этой странице описано, как это сделать и как указывать, какой код и ресурсы сохранить или удалить во время сборки.

код усадка доступен с ProGuard, который обнаруживает и удаляет неиспользуемые классы, поля, методы и атрибуты из вашего упакованного приложения, в том числе из включенных библиотек кода (что делает его ценным инструментом для работы вокруг 64k опорного предела). ProGuard также оптимизирует байт-код, удаляет неиспользуемые инструкции кода и обфускает оставшиеся классы, поля и методы с короткими именами.

Я прочитал хороший пост об этом, так что вы также должны прочитать его от here

Если вы хотите знать о том, как практически использовать его тогда this ответ может быть полезным для вас, и если вы хотите, предложение о том, когда для его использования см. ответ this.

 Смежные вопросы

  • Нет связанных вопросов^_^