Unity 5.6使用Fabric自定义gradle配置

时间:2017-04-17 13:11:10

标签: android-gradle unity5 google-fabric

我想使用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'
        }

2 个答案:

答案 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
    }
}

}