minifyenabled - proguard android studio obfuscation
transformClassesAndResourcesWithProguardForRelease FAILED (10)
¡He luchado con proguard-rules.pro durante bastante tiempo y de ninguna manera soy un profesional aquí! Estoy publicando mi archivo para mostrar que no debe mantener la clase * sin ningún parámetro, ya que esto desactiva toda la ofuscación. Sin embargo, puede proteger cada clase que se extiende desde una determinada clase o cualquier clase que implemente una determinada interfaz. También puede proteger cualquier clase que tenga un constructor que tenga elementos específicos. Tenga en cuenta que no comenté cada línea, ya que no estoy 100% seguro de lo que hace todo, es más como una suposición educada. Mi proyecto incluye ksoap2 (okhttp3, okio, XmlPull) para eso sirven muchas reglas.
Tal vez este puede ser un punto de partida para usted, aún puede necesitar poner algunas reglas adicionales para sus clases.
-android
-dontpreverify
-repackageclasses ''''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-keep public class * extends android.app.Activity
-keepclasseswithmembers class * extends com.way4net.oner.lifa.plugin.ThemedFragment
-keepclasseswithmembers class * extends com.way4net.oner.lifa.plugin.ThemedActivity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keepattributes Signature #there were 1 classes trying to access generic signatures using reflection emfehlung von proguard selbst
-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);
public void set*(...);
}
-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);
}
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn android.support.v4.**
#-dontwarn javax.annotation.**
#-dontwarn org.xmlpull.v1.**
-dontnote android.net.http.*
-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**
-dontnote okhttp3.**
-dontnote org.kobjects.util.**
-dontnote org.xmlpull.v1.**
-keep class okhttp3.** {
*;
}
-keep class org.xmlpull.v1.XmlSerializer {
*;
}
-keep class org.xmlpull.v1.XmlPullParser{
*;
}
-dontwarn org.xmlpull.v1.XmlPullParser
-keep class org.xmlpull.v1.XmlSerializer {
*;
}
-dontwarn org.xmlpull.v1.XmlSerializer
-keep class org.kobjects.** { *; }
-keep class org.ksoap2.** { *; }
-keep class okio.** { *; }
-keep class org.kxml2.** { *; }
-keep class org.xmlpull.** { *; }
Estoy tratando de construir mi aplicación de Android con Gradle en la consola. Pero obtener el siguiente error sobre la tarea '': aplicación: transformClassesAndResourcesWithProguardForRelease'':
build.gradle:
buildscript {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
dependencies {
classpath ''com.android.tools.build:gradle:2.2.3''
classpath ''com.google.gms:google-services:3.0.0''
}
}
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app / build.gradle
apply plugin: ''com.android.application''
android {
compileSdkVersion 24
buildToolsVersion ''24.0.2''
defaultConfig {
applicationId "com.XXX.XXX"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "0.1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile(''proguard-android.txt''),
''proguard-rules.pro''
}
}
}
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(''com.squareup.retrofit2:retrofit:2.1.0'') {
exclude module: ''okhttp''
}
compile ''com.android.support:appcompat-v7:24.2.1''
compile ''com.android.support:design:24.2.1''
compile ''com.squareup.okhttp3:okhttp:3.4.1''
compile ''com.squareup.retrofit2:converter-moshi:2.1.0''
compile ''moe.banana:moshi-jsonapi:2.2.0''
compile ''com.squareup.moshi:moshi-adapters:1.3.1''
compile ''com.google.android.gms:play-services-maps:9.6.0''
compile ''com.android.support:multidex:1.0.1''
compile ''com.google.firebase:firebase-core:9.6.0''
compile ''com.google.firebase:firebase-crash:9.6.0''
testCompile ''junit:junit:4.12''
}
apply plugin: ''com.google.gms.google-services''
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https/://services.gradle.org/distributions/gradle-3.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
./gradlew build --stacktrace
Esta es la excepción que estoy recibiendo:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task
'':app:transformClassesAndResourcesWithProguardForRelease''.
En Android Studio, haga clic en "Reconstruir proyecto" en el menú "Compilar".
Funcionó para mí, también tuve que agregar lo siguiente en un archivo pro-gaurd.txt
#### -- Picasso --
-dontwarn com.squareup.picasso.**
#### -- OkHttp --
-dontwarn com.squareup.okhttp.internal.**
#### -- Apache Commons --
-dontwarn org.apache.commons.logging.**
-ignorewarnings
-keep class * {
public private protected *;
}
Intente agregar este código a sus reglas proGuard, funcionó para mí
-ignorewarnings
-keep class * {
public private *;
}
La respuesta se publicó aquí: La ejecución falló para la tarea '': aplicación: transformClassesAndResourcesWithProguardForRelease
No he cambiado nada solo comentar
// shrinkResources true
// minifyEnabled true
no desea cambiar ningún archivo de protección ya he buscado este problema después de 2 días desperdiciados
Recibí el mismo mensaje de error cuando intentaba compilar la versión de lanzamiento en Android después de instalar react-native-firebase .
Estos son los pasos que seguí,
- Realice todas las configuraciones que mencionan en la documentación de react-native-firebase.
-
Crea una aplicación de Android con este comando
./gradlew assembleRelease
-
Recibí este mensaje de error.
FALLO: Falló la compilación con una excepción.
- Qué salió mal: la ejecución falló para la tarea '': aplicación: transformClassesAndResourcesWithProguardForRelease''.
Trabajo fallido, vea los registros para más detalles
Resolvió este problema cambiando esta línea de código en android / app / build.gradle
-keep class * {
public private protected *;
}
a esto
-keep class * {*;}
Este fue el único cambio que hice. Esto funciona para mi.
Utilice este código en ''proguard-rules.pro'' puede resolverse.
minifyEnabled true
o
minifyEnabled enableProguardInReleaseBuilds
-
nota: los comandos anteriores ignoran los ofuscos
-
puede usar esto en lugar de arriba para guardar el estado de ofuscación
-keepnames clase * {*;}
agregue -ignorewarnings en su archivo proguard y mantenga solo las clases que no desea ofuscar. Algunas de las bibliotecas sugieren mantener algunas de sus clases si está utilizando reglas de protección. Visite sus bibliotecas para más detalles.
agregue este código a
..your-project/app/proguard-rules.pro
-ignorewarnings
su apk firmado se generará con éxito ...
Actualización:
Es mejor corregir sus mensajes de advertencia usando las teclas
-dontwarn
o-keep
en suproguard-rules.pro
... Porque si usa (tal vez sus bibliotecas) la reflexión de Java en su código, la aplicación se bloqueará ...
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile(''proguard-android.txt''),
''proguard-rules.pro''
}
}
Elimine el código mencionado anteriormente en su gradle. Esto funcionó para mí. Esto es solo para un problema dado.