标签: android-proguard

ProGuard:库类的重复定义?

我为我的Android项目运行ProGuard并收到以下警告:

Note: duplicate definition of library class [org.apache.http.conn.scheme.HostNameResolver]
Note: duplicate definition of library class [org.apache.http.conn.scheme.SocketFactory]
Note: duplicate definition of library class [org.apache.http.conn.ConnectTimeoutException]
Note: duplicate definition of library class [org.apache.http.params.HttpParams]
Note: duplicate definition of library class [android.net.http.SslCertificate$DName]
Note: duplicate definition of library class [android.net.http.SslError]
Note: duplicate definition of library class [android.net.http.SslCertificate]

Note: there were 7 duplicate class definitions.
Run Code Online (Sandbox Code Playgroud)

我发现这里解决了这个问题而忽略了它:

-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-keep class android.net.http.** { *; }
-dontwarn android.net.http.**
Run Code Online (Sandbox Code Playgroud)

我没有看到从已使用的库中删除重复项的方法.即使使用dontwarn警告后也不会消失.

这是处理此警告的正确方法,只是忽略它或者这会导致问题吗?

java android proguard android-studio android-proguard

78
推荐指数
2
解决办法
3万
查看次数

在Gradle的Android插件中,"minifyEnabled"和"useProguard"有什么区别?

我看到Gradle的Android插件有一个minifyEnabled属性和useProguard属性,如下所示:

android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
        }
        release {
            minifyEnabled true
            useProguard true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个属性有什么区别?或者说,每个人的意义是什么?

android gradle build.gradle android-gradle-plugin android-proguard

56
推荐指数
4
解决办法
3万
查看次数

Proguard问题"警告:忽略匿名内部类的InnerClasses属性"

我不知道如何描述这个问题.我搜索了很多,但我找不到任何解决方案.

此解决方案也没有帮助我-keepattributes EnclosingMethod:

dependencies {
    compile project(':libraries:material-drawer')
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.android.support:recyclerview-v7:23.2.0'
    compile 'com.android.support:design:23.2.0'
    compile 'com.google.code.gson:gson:2.4'
    compile 'com.mcxiaoke.volley:library:1.0.19'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.squareup.okhttp:okhttp:2.4.0'
    compile 'de.greenrobot:eventbus:2.4.0'
    compile 'com.commit451:PhotoView:1.2.4'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.viewpagerindicator:viewpagerindicator:2.4.3'
    compile('com.github.afollestad.material-dialogs:commons:0.8.5.6@aar') {
        transitive = true
    }
    compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
        transitive = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

并且jar文件夹包含ormlite-android-4.48.jarormlite-core-4.48.jar.

Proguard文件:

-keepattributes EnclosingMethod
-dontobfuscate

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

-dontwarn android.support.v4.**

#FOR APPCOMPAT 23.1.1:
-keep class !android.support.v7.view.menu.*MenuBuilder*, android.support.v7.** { …
Run Code Online (Sandbox Code Playgroud)

android proguard android-support-library android-proguard

53
推荐指数
3
解决办法
5万
查看次数

错误:任务执行失败':android:transformClassesAndResourcesWithProguardForRelease'

每次运行我的项目时都会收到此错误.我可以做一个清洁,然后再次运行,它的工作原理.但它不是最佳解决方案.有任何想法吗?

Error:Execution failed for task ':android:transformClassesAndResourcesWithProguardForRelease'.
Run Code Online (Sandbox Code Playgroud)

java.io.IOException:无法将android\build\intermediates\transforms\proguard\release\folders\3\1f\main\classes.jar重命名为android\build\intermediates\transforms\proguard\release\jars\3\1f\classes.jar

android build android-gradle-plugin android-proguard

49
推荐指数
1
解决办法
7万
查看次数

在播放服务上构建失败:11.8.x与专业防护解析器错误

所以看起来最新的播放服务中存在一个错误.有谁知道如何解决这个问题?

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':myappname:transformClassesWithAndroidGradleClassShrinkerForDevelopmentDebug'.
> ProGuard configuration parser error: /Users/myusername/.gradle/caches/transforms-1/files-1.1/play-services-base-11.8.0.aar/d2ad9e16677fda9cf07a1280a66e91ca/proguard.txt line 3:88 no viable alternative at input '<fields>'
Run Code Online (Sandbox Code Playgroud)

更多信息.似乎问题出在核心模块中:

Error:Execution failed for task ':myappname:transformClassesWithAndroidGradleClassShrinkerForDevelopmentDebug'.
> ProGuard configuration parser error: /Users/myusername/.gradle/caches/transforms-1/files-1.1/play-services-base-11.8.0.aar/d2ad9e16677fda9cf07a1280a66e91ca/proguard.txt line 3:88 no viable alternative at input '<fields>'
Run Code Online (Sandbox Code Playgroud)

编辑:导致该错误的文件的内容是:

# b/35135904 Ensure that proguard will not strip the mResultGuardian.
-keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult {
  com.google.android.gms.common.api.internal.BasePendingResult.ReleasableResultGuardian <fields>;
}
Run Code Online (Sandbox Code Playgroud)

android google-play-services android-proguard

46
推荐指数
2
解决办法
7878
查看次数

Xamarin.Android Proguard - 不支持的类版本号52.0

我正在尝试在我的Xamarin.Android项目中使用Proguard,但编译失败并出现错误 Unsupported class version number [52.0] (maximum 51.0, Java 1.7)

我从这两个 问题中看到,它可能与Java 7和Java 8不匹配,更确切地说,某些版本的proguard不支持Java 8.但是在Xamarin首选项 - > SDK位置中,Java SDK指向JDK 7:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home

是否有更精确配置proguard的地方?还有其他想法吗?

这是失败日志:

java.io.IOException:无法读取[/Library/Frameworks/Xamarin.Android.framework/Versions/7.0.0-18/lib/xbuild-frameworks/MonoAndroid/v7.0/mono.android.jar](可以在proguard.InputReader.readInput中的proguard.InputReader.readInput(InputReader.java:230)处理类[android/app/ActivityTracker.class](不支持的类版本号[52.0](最大51.0,Java 1.7))) InputReader.java:200)在proguard.InputReader.readInput(InputReader.java:178)的proguard.InputReader.exe执行(InputReader.java:78)proguard.ProGuard.readInput(ProGuard.java:196)proguard.ProGuard.执行(ProGuard.java:78)在proguard.ProGuard.main(ProGuard.java:492)引起:java.io.IOException:无法处理类[android/app/ActivityTracker.class](不支持的类版本号[ 52.0](最大51.0,Java 1.7))proguard.io.ClassReader.read(ClassReader.java:112)位于proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)的proguard.io.JarReader.read(JarReader) .java:65)在proguard.io.Director progPard.readFiles(DirectoryPump.java:65)中的progPard.EndoryPump.pumpDataEntries(DirectoryPump.java:53)中的yPump.readFiles(DirectoryPump.java:65)... 6更多引起者:java.lang. UnsupportedOperationException:proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:88)中proguard.classfile.util.ClassUtil.checkVersionNumbers(ClassUtil.java:140)中不支持的类版本号[52.0](最大51.0,Java 1.7)在proguard.classfile.ProgramClass.accept(ProgramClass.java:346)的proguard.io.ClassReader.read(ClassReader.java:91)... 11更多

9警告1错误

xamarin.android xamarin android-proguard

44
推荐指数
1
解决办法
3万
查看次数

找不到满足版本约束的'com.android.support:support-annotations'版本

当我想使用Proguard规则生成签名的APK(发布)时,我收到此错误消息:

找不到满足版本限制的'com.android.support:support-annotations'版本:依赖路径'Transition:library:unspecified' - >'com.android.support.test:runner:1.0.2' - - >'com.android.support:support-annotations:27.1.1'约束路径'转换:库:未指定' - >'com.android.support:support-annotations'严格'26 .1.0'因为以下原因原因:debugRuntimeClasspath使用版本26.1.0 ...

Gradle(app):

android {
compileSdkVersion 28

defaultConfig {        
    minSdkVersion 21
    targetSdkVersion 26      
}

buildTypes {

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

}

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//noinspection GradleCompatible
implementation 'com.android.support:support-compat:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-annotations:28.0.0'
//noinspection GradleCompatible
implementation 'com.android.support:cardview-v7:28.0.0'
//noinspection GradleCompatible
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.android.support:appcompat-v7'
api 'com.google.android.gms:play-services:12.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-proguard

37
推荐指数
1
解决办法
2万
查看次数

如何使用JACK编译器执行缩小和混淆?

谷歌已经为Android开发者发布了针对Android Studio 2.1 的新JACK编译器测试版.

我的问题是,我们如何使用JACK为APK进行模糊处理?下面的文章说JACK 本地执行模糊处理并且不需要Proguard:

以下文章说JACK使用Proguard配置文件(即.pro文件)来执行混淆:

它也说

在此过程中,Jack还处理任何请求的代码缩小(缩小和/或混淆).

这到底是什么意思?我们是否必须使用该minifyEnabled选项并定义.pro包含Proguard选项的文件?

综上所述:

  • 我们究竟如何与JACK实现混淆?我们是否可以绕过Proguard的使用,或者Proguard在混淆过程中扮演事实上的角色,即使我们使用JACK编译?

  • JACK目前是否支持混淆,是否可以在Android Studio的稳定(即非beta/canary)版本中使用?

注意:

我已经提到了以下帖子:

进一步参考:

更新:

答案马特Insko是有益的,但我想更详细,更准确,规范的答案.

android android-sdk-tools android-studio android-jack-and-jill android-proguard

36
推荐指数
1
解决办法
4807
查看次数

proguard-android.txt和proguard-rules.pro有什么区别? - Android

在我buildType看来这个:

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
}
Run Code Online (Sandbox Code Playgroud)

我有一些问题:

  1. 为什么有两个文件?
  2. 他们之间有什么区别?
  3. 我应该在哪里写我的规则?

android proguard android-gradle-plugin android-proguard

31
推荐指数
2
解决办法
1万
查看次数

使用Gradle和ProGuard的Android Build:"必须在输入jar之后指定输出jar,否则它将为空"

我正在使用Gradle创建一个具有不同风格的构建.它过去一直很好,直到现在,直到我想启用Proguard.我启用minifyEnabled了Release Build,现在我有一个例外说:

" Caused by: org.gradle.internal.UncheckedException: java.io.IOException: The output jar [.../app/build/intermediates/multi-dex/dev/release/componentClasses.jar] must be specified after an input jar, or it will be empty."

有人知道造成这种异常的原因吗?在发布我的应用程序之前,我基本上想要启用ProGuard.这是我的Gradle文件,如下所示.

lintOptions {
    abortOnError false
}

dexOptions{
    incremental true
    javaMaxHeapSize "4g"
}

defaultConfig {
        applicationId "..."
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

buildTypes {

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

    debug {
        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.debug
    }
} …
Run Code Online (Sandbox Code Playgroud)

android proguard gradle android-gradle-plugin android-proguard

26
推荐指数
1
解决办法
1万
查看次数