首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Proguard缩减Android代码

如何使用Proguard缩减Android代码
EN

Stack Overflow用户
提问于 2015-07-20 07:56:36
回答 4查看 4.4K关注 0票数 1

因为我在我的应用程序中使用了很多依赖项,所以我达到了65k个方法的极限(我达到了76k个方法)。我在android.developer上看到过proguard是用来缩减代码的。

那么- proguard是只缩小我的应用程序代码,还是也缩小我的依赖项的代码?在使用proguard缩小代码时,我需要对某些东西保持警惕吗?我该怎么做?

我的Gradle版本:

代码语言:javascript
复制
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'
}
EN

回答 4

Stack Overflow用户

发布于 2017-10-20 16:01:35

作为ProGuard的替代方案,您可以通过关闭ProGuard来使用built-in Gradle shrinker,但仍然引用ProGuard配置。这将删除未使用的代码,但不会混淆或执行任何其他“魔术”。虽然只推荐用于Debug版本,但如果您认为不需要混淆,我不明白为什么您不能将其用于发布版本。

与ProGuard (在我看来)相比,它的主要好处是避免了ProGuard配置与代码库结构和第三方依赖项之间的紧密耦合。

build.gradle:

代码语言:javascript
复制
minifyEnabled true
useProguard false
proguardFiles ('proguard-basic.pro', getDefaultProguardFile('proguard-android.txt'))

proguard-basic.pro:

代码语言:javascript
复制
-dontwarn javax.**
-keep class com.mycompany.** { *; }
票数 1
EN

Stack Overflow用户

发布于 2015-07-20 08:42:39

如果您通过ProGuard启用缩小,它也会缩小您的依赖项。

库通常还没有被ProGuard混淆/缩小。一些库在默认情况下不会正常工作,如果它们是模糊的,所以您应该检查您使用的任何库,看看它们是否有任何关于ProGuard的文档。例如,Butterknife有一些特殊的ProGuard规则,您需要包括这些规则,以确保它继续正常工作。

票数 0
EN

Stack Overflow用户

发布于 2015-07-20 09:13:45

对我来说,你应该寻找multidex,超过65k的限制,而不是防范,因为在较长的运行,后者不是你的问题的解决方案。

请参阅文档:https://developer.android.com/tools/building/multidex.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31507208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档