android - 使用 Android Studio 构建的应用程序 Apk 比使用 Eclipse 构建的应用程序 Apk 大

标签 android build android-studio apk android-gradle-plugin

最近我将项目迁移到 Android Studio。该项目引用库项目而不复制它(请参阅 this answer )。

我注意到从 Android Studio 生成的 apk 比从 Eclipse 生成的 apk 大(几乎大两倍)。当我解压这两个 apk 文件时,我看到 Android Studio 中的 apk 中多了一个文件夹“main”,其中包含“res”文件夹和 AndroidManifest.xml。

问题是 apk 的主目录中有一个“res”文件夹(/res),其中包含相同的资源(/main/res)。

我认为下一个 gradle 文件会导致问题,但如果没有它,项目就无法构建。

build.gradle 用于我的库模块 - my_android_project_lib 模块

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

apply plugin: 'com.android.library'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 21
    }

    // I think this duplicates the resources
    sourceSets {
        main {
            manifest.srcFile 'my_android_project_lib/src/main/AndroidManifest.xml'
            java.srcDirs = ['my_android_project_lib/src']
            resources.srcDirs = ['my_android_project_lib/src']
            aidl.srcDirs = ['my_android_project_lib/src']
            renderscript.srcDirs = ['my_android_project_lib/src']
            res.srcDirs = ['my_android_project_lib/src/main/res', 'slidingMenuLib/src/main/res']
            assets.srcDirs = ['my_android_project_lib/src/main/assets']
        }
    }
}

dependencies {
    compile project(':slidingMenuLib')
    compile fileTree(dir: 'my_android_project_lib/libs', include: ['*.jar'])
    compile fileTree(dir: 'slidingMenuLib/libs', include: ['*.jar'])
    compile 'com.google.code.gson:gson:1.7.1'
}

设置.gradle

include ':my_android_app'
include ':my_android_project_lib'
include ':slidingMenuLib'
project(':my_android_project_lib').projectDir = new File(settingsDir, '../my_android_project_lib')

my_android_app 模块的 build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "my.android.app"
        minSdkVersion 15
        targetSdkVersion 19
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(path: ':my_android_project_lib')
}

my_android_app 项目的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

你知道如何解决这个问题吗?我遗漏了一些重要的东西。

最佳答案

我发现了问题。当我从 my_android_project_lib 模块的 build.gradle 中删除以下行时,应用程序的大小恢复正常。

resources.srcDirs = ['anyoption_android_v2_lib/src']

my_android_project_lib 模块的最终 build.gradle 是:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

apply plugin: 'com.android.library'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 21
    }

    // The problem is here.
    sourceSets {
        main {
            manifest.srcFile 'my_android_project_lib/src/main/AndroidManifest.xml'
            java.srcDirs = ['my_android_project_lib/src']
            res.srcDirs = ['my_android_project_lib/src/main/res']

            // Removed
            // resources.srcDirs = ['my_android_project_lib/src'] - MAIN PROBLEM
            // aidl.srcDirs = ['my_android_project_lib/src']
            // renderscript.srcDirs = ['my_android_project_lib/src']
            // res.srcDirs = ['my_android_project_lib/src/main/res', 'slidingMenuLib/src/main/res']
            // assets.srcDirs = ['my_android_project_lib/src/main/assets']
        }
    }
}

dependencies {
    compile project(':slidingMenuLib')
    compile fileTree(dir: 'my_android_project_lib/libs', include: ['*.jar'])
    compile fileTree(dir: 'slidingMenuLib/libs', include: ['*.jar'])
    compile 'com.google.code.gson:gson:1.7.1'
}

关于android - 使用 Android Studio 构建的应用程序 Apk 比使用 Eclipse 构建的应用程序 Apk 大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28218041/

相关文章:

java - y 轴 2D 上的 OpenGL Android 转换对象

android - 如何测试 android 应用程序的 ipv6 兼容性

java - 如何从 APK 文件恢复 Gradle 文件?

visual-c++ - WAF:MinGW (GCC) 和 MSVC 2012 之间的冲突

android - 我如何在android中第一张图片的选定点上将两个位图一个接一个地合并?

java - 目标是从我的项目中删除文件不起作用

linux - 使用软件 bam-window 软件的 cmake 错误

java - 关于在2D游戏中编写重力代码的问题

java - Android点击弹出菜单项不显示在弹出菜单上

android - 由于 ScrollView,启动 Activity 后键盘出现