我将我的Android Studio项目升级为gradle,现在APK比gradle大15倍

我将我的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(发布模式)。大

我有一个更老的项目,它是在Android Studio的第一个版本中编码的。除了应用程序图标外,项目没有任何大型资产。作为AdMob SDK 4.3.1使用的唯一第三方库。得到的有符号APK为105kb

现在Google要求我从AdMob SDK升级到Google Play Services SDK以继续提供广告服务。因此我启动了最新版本的Android Studio,将项目转换为
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的请求会拉入所有四个库。