我有自己的自定义库,用于维护我想在多个项目中使用的方法和类。它没有编译成.jar文件 - 它设置为com.android.library并位于自己的文件夹中。
我的一个应用程序非常小 - 不到500k。当我添加这个库时,它膨胀到1350k。虽然它仍然很小,但对于这个特定的应用程序来说这是一个问题,我承诺尽可能小。
应用程序本身的src文件夹是77k。库项目的src文件夹是112k。生成的apk的.dex文件正好是1mb。 这怎么可能?
图书馆项目确实参考了游戏服务愿景。但是在这个应用程序中没有引用它,我相信Proguard应该将其剥离。
在' Build Variants'窗口,应用程序和库都设置为"发布"。
我的应用的build.gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
//**CONFIG STUFF**//
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
applicationIdSuffix '.debug'
versionNameSuffix '.debug'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
compile project(':farmsoftlibs')
}
注意:appcompat引用也在我的应用程序的旧版本中是500k,所以我知道这不是主要的罪魁祸首。
我的图书馆build.gradle:
apply plugin: 'com.android.library'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.android.gms:play-services-vision:7.8.0'
}
所以我认为可以解决难题的问题是:
如果有其他文件与回答此问题相关,请与我们联系。谢谢!
答案 0 :(得分:0)
java
文件被编译到class
文件中,该文件通常大于java
源。我不确定您如何检查您的图书馆大小,但请参阅问题2的回答compile 'com.google.android.gms:play-services-vision:7.8.0'
,这样的依赖,可以包含多个jar,因为传递依赖,即你使用的库取决于1个或多个库,它们还可以进一步依赖于其他库minifyEnabled=true
,而且你没有将proguard-rules.pro
更改为-keep
不必要的类或方法,那么它应该可以胜任。有关问题2的更多信息,我的测试compile 'com.google.android.gms:play-services-vision:7.8.0'
,至少添加了4个依赖项play-services-vision
,play-services-base
,support-annotations
和support-v4
。
此外,请注意,使用您的配置,proguard只会缩小(删除不必要的类)Release
版本,而不是Debug
版本。
Peronsal opnion:实际上1.3MB应该被认为非常小