我正在尝试将我的项目从Eclipse迁移到Android Studio。 在创建所有模块(应用程序有一些库项目)后,Gradle始终失败并显示此错误:
Error:Execution failed for task ':AppLib:mergeDebugResources'.
> Unsupported type 'database' in file C:\Android\Code\AS_workspace\SuperApp\Infra\src\main\res\values\database.xml
此XML文件在库项目中定义,并在应用程序模块中使用相同名称重写。
有人说这在Eclipse中很好用了很久......
有什么想法吗?
感谢。
添加build.gradle文件:
这是app文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.app.superapp"
minSdkVersion 10
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':library1')
}
这是模块的文件:library1是一个android库:
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 10
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':library2')
}
这是module:library2的文件,它也是一个库:
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 10
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':AppLib')
}
现在是AppLib的库:
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 10
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':GooglePlayServices')
compile project(':facebook')
}
我有很多库但是一旦我完全理解了Gradle的味道,我就可以将它们减少到两个模块。
AppLib中的Database.xml是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="NAME" format="string" type="database"/>
<item name="TABLE_NAME" format="string" type="database"/>
<item name="DATABASE_VERSION" format="integer" type="database">101</item>
<item name="MIN_APPLICATION_DATABASE_VERSION" format="integer" type="database">10</item>
</resources>
SuperApp中的Database.xml只是添加字符串。
答案 0 :(得分:0)
https://code.google.com/p/android/issues/detail?id=52962
以上涉及传递库依赖关系。它的长度,并不完全符合您对名称值的冲突,但您可能想要查看它。
我会尝试使用AS 0.8.14+中的项目导入对话框,这对于库之间的传递依赖性非常好......不要担心编译'build.gradles'及其细节。相反,让进口商给它打击,然后,如果它不会成功,请回到上面问题链接的详细信息并尝试类似:
releaseCompile project(path: '..:$Path-to-Library1', configuration: 'release')
debugCompile project(path: '..:$Path-to-Library1', configuration: 'debug')
和你的'Library2'相同
假设:您的eclipse.project.properties如下所示,以指导AS导入器...
android.library.reference.1=../Library1
答案 1 :(得分:0)
我认为您需要在app build.gradle中使用较新的gradle版本进行指定。
前:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.3'
}
}
较旧的gradle版本更经常地给出mergeDebugResources错误。
答案 2 :(得分:0)
这显然是因为android studio与“自定义”类型不太合适,就像我放“数据库”一样。 在使用字符串和整数后,我工作了。
不知道为什么在Eclipse中它没关系,但AS抱怨。