因为我在我的应用程序中使用了很多依赖项,所以我达到了65k个方法的极限(我达到了76k个方法)。我在android.developer上看到过proguard是用来缩减代码的。
那么- proguard是只缩小我的应用程序代码,还是也缩小我的依赖项的代码?在使用proguard缩小代码时,我需要对某些东西保持警惕吗?我该怎么做?
我的Gradle版本:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "some.Path"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
configurations {
compile.exclude group: 'org.apache.xmlbeans'
}
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.github.PhilJay:MPAndroidChart:v2.1.0'
compile 'com.opencsv:opencsv:3.4'
compile 'org.apache.poi:poi:3.12'
compile 'org.apache.poi:poi-ooxml:3.12'
}
发布于 2017-10-20 16:01:35
作为ProGuard的替代方案,您可以通过关闭ProGuard来使用built-in Gradle shrinker,但仍然引用ProGuard配置。这将删除未使用的代码,但不会混淆或执行任何其他“魔术”。虽然只推荐用于Debug版本,但如果您认为不需要混淆,我不明白为什么您不能将其用于发布版本。
与ProGuard (在我看来)相比,它的主要好处是避免了ProGuard配置与代码库结构和第三方依赖项之间的紧密耦合。
build.gradle:
minifyEnabled true
useProguard false
proguardFiles ('proguard-basic.pro', getDefaultProguardFile('proguard-android.txt'))
proguard-basic.pro:
-dontwarn javax.**
-keep class com.mycompany.** { *; }
发布于 2015-07-20 08:42:39
如果您通过ProGuard启用缩小,它也会缩小您的依赖项。
库通常还没有被ProGuard混淆/缩小。一些库在默认情况下不会正常工作,如果它们是模糊的,所以您应该检查您使用的任何库,看看它们是否有任何关于ProGuard的文档。例如,Butterknife有一些特殊的ProGuard规则,您需要包括这些规则,以确保它继续正常工作。
发布于 2015-07-20 09:13:45
对我来说,你应该寻找multidex,超过65k的限制,而不是防范,因为在较长的运行,后者不是你的问题的解决方案。
请参阅文档:https://developer.android.com/tools/building/multidex.html
https://stackoverflow.com/questions/31507208
复制相似问题