我将我的Android Studio项目升级为gradle,现在APK比gradle大15倍
我有一个更老的项目,它是在Android Studio的第一个版本中编码的。除了应用程序图标外,项目没有任何大型资产。作为AdMob SDK 4.3.1使用的唯一第三方库。得到的有符号APK为105kb 现在Google要求我从AdMob SDK升级到Google Play Services SDK以继续提供广告服务。因此我启动了最新版本的Android Studio,将项目转换为我将我的Android Studio项目升级为gradle,现在APK比gradle大15倍,android,android-studio,gradle,Android,Android Studio,Gradle,我有一个更老的项目,它是在Android Studio的第一个版本中编码的。除了应用程序图标外,项目没有任何大型资产。作为AdMob SDK 4.3.1使用的唯一第三方库。得到的有符号APK为105kb 现在Google要求我从AdMob SDK升级到Google Play Services SDK以继续提供广告服务。因此我启动了最新版本的Android Studio,将项目转换为gradle,引用了最新的Google Play Services SDK并重新生成了一个签名SDK(发布模式)。大
gradle
,引用了最新的Google Play Services SDK并重新生成了一个签名SDK(发布模式)。大小为1595 Kb
我不明白为什么它这么大,也找不到减少它的方法。我试图像在回答中那样排除库,但结果文件大小没有改变
我错过了什么
这是我的gradle文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.1'
}
}
apply plugin: 'android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.google.android.gms:play-services-ads:9.6.1'
}
android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
defaultConfig {
minSdkVersion 15
targetSdkVersion 24
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
buildscript{
存储库{
mavenCentral()
}
依赖关系{
classpath'com.android.tools.build:gradle:2.2.1'
}
}
应用插件:“android”
依赖关系{
编译文件树(目录:“libs”,包括:“*.jar”)
编译'com.google.android.gms:play服务广告:9.6.1'
}
安卓{
编译DK24版
buildToolsVersion“24.0.3”
默认配置{
第15版
targetSdkVersion 24
}
源集{
主要{
manifest.src文件“AndroidManifest.xml”
java.srcDirs=['src']
resources.srcDirs=['src']
aidl.srcDirs=['src']
renderscript.srcDirs=['src']
res.srcDirs=['res']
assets.srcDirs=['assets']
}
//将测试移动到tests/java、tests/res等。。。
instrumentTest.setRoot('tests'))
//将生成类型移动到生成类型/
//例如,build-types/debug/java、build-types/debug/AndroidManifest.xml。。。
//这会将它们移出src/…下的默认位置,这将
//与主源集正在使用的src/冲突。
//应同时添加新的构建类型或产品风格
//通过类似的定制。
setRoot('build-types/debug')
setRoot('build-types/release')
}
}
使用Android Studio APK Analyzer确定空间的去向。或者,将您的build.gradle
文件发布在此处,作为.ProGuard的一部分,可以帮助减少APK大小,因为它可以删除未使用的代码。值得一看。您是否尝试使用com.google.android.gms:play services广告
,而不是完整的com.google.android.gms:play services
?除非您在libs/
中有很多罐子,否则您的问题似乎来自play services广告
。仅AAR就有约800KB,不包括可传递依赖中的约1400KB。有趣的是,其中一个可传递依赖项被称为play services ads lite
,它只有约300KB(加上约500KB的可传递依赖项)。因此,您可能会看到哪些场景可以使用play services ads lite
代替play services ads
,如果有的话。是的。如果您请求库A,而库A也需要库B、C和D,那么您对A的请求会将这四个库全部拉入。请使用Android Studio APK Analyzer确定空间的去向。或者,将您的build.gradle
文件发布在此处,作为.ProGuard的一部分,可以帮助减少APK大小,因为它可以删除未使用的代码。值得一看。您是否尝试使用com.google.android.gms:play services广告
,而不是完整的com.google.android.gms:play services
?除非您在libs/
中有很多罐子,否则您的问题似乎来自play services广告
。仅AAR就有约800KB,不包括可传递依赖中的约1400KB。有趣的是,其中一个可传递依赖项被称为play services ads lite
,它只有约300KB(加上约500KB的可传递依赖项)。因此,您可能会看到哪些场景可以使用play services ads lite
代替play services ads
,如果有的话。是的。如果您请求库A,而库A也需要库B、C和D,那么您对A的请求会拉入所有四个库。