我想使用gradle为Unity Android构建配置Fabric依赖项。我现在正在导出项目并使用Android Studio来摆脱错误,然后准备一个自定义工作“mainTemplate.gradle”,这样我就可以直接从Unity 5.6构建。 以下是Unity建议的配置依赖项:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// other dependencies
compile project(':answers')
compile project(':beta')
compile project(':crashlytics')
compile project(':crashlytics-wrapper')
compile project(':fabric')
compile project(':fabric-init')
}
每个Fabric文件夹都被视为具有自己的gradle配置的库。 以下是我得到的错误(由于文件在两个“库”的相同名称空间中使用):
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lio/fabric/unity/crashlytics/android/BuildConfig;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lio/fabric/unity/android/BuildConfig;
我尝试添加以下内容,但它不起作用:
android {
dexOptions {
preDexLibraries = false
}
我也尝试过没有成功:
task androidReleaseJar(type: Jar, dependsOn: assembleRelease) {
from "$buildDir/intermediates/classes/release/"
exclude '**/BuildConfig.class'
}
答案 0 :(得分:2)
以下是我解决此问题的方法: 默认情况下,每个结构文件夹都被视为一个项目,但只有“结构”需要作为一个处理,因为它包含一个“res”文件夹和一个带有所需元数据值的“AndroidManifest.xml”文件。所以我只将“fabric”保留为项目,并将其他依赖项更改为简单的* .jar文件。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile fileTree(dir: 'fabric-init/libs', include: ['*.jar'])
compile fileTree(dir: 'crashlytics-wrapper/libs', include: ['*.jar'])
compile fileTree(dir: 'crashlytics/libs', include: ['*.jar'])
compile fileTree(dir: 'beta/libs', include: ['*.jar'])
compile fileTree(dir: 'answers/libs', include: ['*.jar'])
compile project(':fabric')
}
并且在Settings.gradle
中我只保留一个项目参考:
//include 'answers'
//include 'beta'
//include 'crashlytics'
//include 'crashlytics-wrapper'
include 'fabric'
//include 'fabric-init'
答案 1 :(得分:1)
您可以通过仅更改一个文件(不进行Fabric修改)来禁用BuildConfig java类的生成。将它放在Plugins / Android / mainTemplate.gradle的末尾,用于所有问题项目:
['crashlytics', 'crashlytics-wrapper', 'fabric', 'fabric-init'].each { name ->
project(":$name").tasks.whenTaskAdded { task ->
if (task.name == 'generateDebugBuildConfig' || task.name == 'generateReleaseBuildConfig' ) {
task.enabled = false
}
}
}