使用Android Studio构建的应用程序Apk比使用Eclipse构建的应用程序大
最近我把我的项目迁移到了安卓工作室。该项目引用库项目,而不复制它(请参见) 我注意到Android Studio生成的apk比Eclipse生成的apk大(几乎是后者的两倍)。当我解开这两个apk文件时,我看到在Android Studio的apk中还有一个文件夹“main”,它包含“res”文件夹和AndroidManifest.xml 问题是apk的主目录中有一个“res”文件夹(/res),其中包含相同的资源(/main/res) 我认为下一个gradle文件导致了这个问题,但没有它,项目就无法构建 build.gradle用于我的库模块-我的android项目库模块使用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文件导致了这个问题,但没有它,项目
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作为子模块,但它最终还是显式地引入了很多东西。