2015-07-31 6 views
0
buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 

repositories { 
    maven { url 'https://maven.fabric.io/public' } 
} 


android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     applicationId "com.android.hello" 
     minSdkVersion 9 
     targetSdkVersion 21 
     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_7 
      targetCompatibility JavaVersion.VERSION_1_7 
     } 
    } 

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

dependencies { 
    compile 'com.android.support:support-v4:22.2.0' 
    compile 'com.google.code.gson:gson:2.2.4' 
    compile 'com.android.support:appcompat-v7:22.2.0' 
    compile 'com.google.android.gms:play-services:+' 
    compile files('libs/bolts-android-1.2.0.jar') 
    compile files('libs/facebook.jar') 
    compile 'de.hdodenhof:circleimageview:1.2.1' 
    compile 'com.android.support:recyclerview-v7:21.0.+' 
    compile 'com.android.support:cardview-v7:21.0.+' 
    compile 'com.github.bumptech.glide:glide:3.5.2' 
    compile 'com.android.support:support-v4:22.0.0' 
    compile 'com.jakewharton:butterknife:6.1.0' 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 

    compile project(':gcmv') 
    compile 'com.android.support:design:22.2.0' 
} 

Когда я подписываю приложение для приложения через ключ с «minify true» в градиенте, он падает после завершения. , но когда я устанавливаю «minify false», он отлично работает после подписания. так скажите мне, есть ли какие-либо дополнения в файле gradle, чтобы освободить свойство «minify true». Для справки я добавляю файл gradle и файл proguard.Сбой приложения для Android после подписания

# Add project specific ProGuard rules here. 
# By default, the flags in this file are appended to flags specified 
# in C:\Users\UMANH\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 *; 
#} 
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* 
-optimizationpasses 5 
-allowaccessmodification 
-dontpreverify 

# The remainder of this file is identical to the non-optimized version 
# of the Proguard configuration file (except that the other file has 
# flags to turn off optimization). 

-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-verbose 

-keepattributes *Annotation* 
-keepattributes Signature 
-keep public class com.google.vending.licensing.ILicensingService 
-keep public class com.android.vending.licensing.ILicensingService 

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native 
-keepclasseswithmembernames class * { 
    native <methods>; 
} 

# keep setters in Views so that animations can still work. 
# see http://proguard.sourceforge.net/manual/examples.html#beans 
-keepclassmembers public class * extends android.view.View { 
    void set*(***); 
    *** get*(); 
} 

# We want to keep methods in Activity that could be used in the XML attribute onClick 
-keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
} 

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations 
-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keep class butterknife.** { *; } 
-dontwarn butterknife.internal.** 
-keep class **$$ViewBinder { *; } 

-keepclasseswithmembernames class * { 
    @butterknife.* <fields>; 
} 

-keepclasseswithmembernames class * { 
    @butterknife.* <methods>; 
} 

-keep public class * implements com.bumptech.glide.module.GlideModule 
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { 
    **[] $VALUES; 
    public *; 
} 
-keep public class android.support.v7.widget.** { *; } 
-keep public class android.support.v7.internal.widget.** { *; } 
-keep public class android.support.v7.internal.view.menu.** { *; } 

-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 

-keep public class * extends android.support.v4.view.ActionProvider { 
    public <init>(android.content.Context); 
} 

-keepattributes EnclosingMethod 

# Gson specific classes 
-keep class sun.misc.Unsafe { *; } 
-keep class com.google.gson.stream.** { *; } 

-keep class android.support.v7.widget.RoundRectDrawable { *; } 

-keepclassmembers class fqcn.of.javascript.interface.for.webview { public *;} 

-keep class com.crashlytics.** { *; } 
-dontwarn com.crashlytics.** 

-dontwarn android.support.design.** 
-keep class android.support.design.** { *; } 
-keep interface android.support.design.** { *; } 
-keep public class android.support.design.R$* { *; } 

-keep public class android.** {*;} 
-keep public class com.google.android.** {*;} 


-keep class com.facebook.** {*;} 
# The support library contains references to newer platform versions. 
# Don't warn about those in case this app is linking against an older 
# platform version. We know about them, and they are safe. 
-dontwarn android.support.** 
-dontwarn com.facebook.** 
-dontwarn com.squareup.okhttp.** 
+0

Подключите устройство к компьютеру и проверьте журнал ошибок из подписанного APK. Это может быть очень полезно. – EliaszKubala

+0

Какие другие правила у вас есть в вашем файле конфигурации proguard. – Raghunandan

+0

только те правила, которые удаляют предупреждение, которое поступает в мои файлы библиотеки. – Umang

ответ

1

Вы должны настроить правила для ProGuard

Для примера нож для масла

Butter нож создает и использует классы динамически, что означает, что инструменты статического анализа, как ProGuard думают, что они не используются. Чтобы они не удалялись, явным образом отмечаю их сохранение. Чтобы запретить классы переименования ProGuard, которые используют @Bind в поле участника, используется опция keepclasseswithmembernames.

-keep class butterknife.** { *; } 
-dontwarn butterknife.internal.** 
-keep class **$$ViewBinder { *; } 

-keepclasseswithmembernames class * { 
    @butterknife.* <fields>; 
} 

-keepclasseswithmembernames class * { 
    @butterknife.* <methods>; 
} 

Для Glide

-keep public class * implements com.bumptech.glide.module.GlideModule 

-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { 
    **[] $VALUES; 
    public *; 
} 

Для gson

https://google-gson.googlecode.com/svn/trunk/examples/android-proguard-example/proguard.cfg

Точно так же сделать это для всех других внешних библиотек, которые требуют определения этих правил. Вы можете проверить свои веб-сайты или GitHub проект домашней страницы

Где добавить все выше

Метод getDefaultProguardFile('proguard-android.txt') получает параметр по умолчанию ProGuard настройки из Android SDK инструментов/ProGuard/папок.

Файл proguard-android-optimize.txt также доступен в этой папке Android SDK с одинаковыми правилами, но с включенными оптимизациями.

proguard-rules.pro относится к той, которая находится под вашей проектной структурой.

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

+0

так что в proguard-android-optimize.txt нет необходимости его настраивать ???? – Umang

+0

Look @ proguardFiles getDefaultProguardFile ('proguard-android.txt'), 'proguard-rules.pro' в вашем файле gradle – Raghunandan

+0

okk, если я изменю его proguard-rules.pro на proguard-android-optimize.txt, он будет работать для меня или не – Umang

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