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

使用Android Studio构建的应用程序Apk比使用Eclipse构建的应用程序大,android,build,android-studio,apk,android-gradle-plugin,Android,Build,Android Studio,Apk,Android Gradle Plugin,最近我把我的项目迁移到了安卓工作室。该项目引用库项目,而不复制它(请参见) 我注意到Android Studio生成的apk比Eclipse生成的apk大(几乎是后者的两倍)。当我解开这两个apk文件时,我看到在Android Studio的apk中还有一个文件夹“main”,它包含“res”文件夹和AndroidManifest.xml 问题是apk的主目录中有一个“res”文件夹(/res),其中包含相同的资源(/main/res) 我认为下一个gradle文件导致了这个问题,但没有它,项目

最近我把我的项目迁移到了安卓工作室。该项目引用库项目,而不复制它(请参见)

我注意到Android Studio生成的apk比Eclipse生成的apk大(几乎是后者的两倍)。当我解开这两个apk文件时,我看到在Android Studio的apk中还有一个文件夹“main”,它包含“res”文件夹和AndroidManifest.xml

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

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

build.gradle用于我的库模块-我的android项目库模块

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'
}
设置。渐变

include ':my_android_app'
include ':my_android_project_lib'
include ':slidingMenuLib'
project(':my_android_project_lib').projectDir = new File(settingsDir, '../my_android_project_lib')
build.gradle用于我的android应用程序模块

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')
}
build.gradle用于我的安卓应用程序项目

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

allprojects {
    repositories {
        jcenter()
    }
}

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

我发现了这个问题。当我从我的_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'
}
论评论

resources.srcDirs=['src']

build.gradle
文件中,为我工作

build.gradle
文件中的源集如下所示

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')
}
sourceset{
主要{
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')
}

您能在APK中发布每个元素的大小吗?这将有助于确定问题所在。在主项目的构建中同时引入
'my\u android\u project\u lib/src/main/res'
'slidingMenuLib/src/main/res'
是有问题的。事实上,尽管ti依赖slidingMenuLib作为子模块,但它最终还是显式地引入了很多东西。