2017-04-17 278 views
1

我想使用gradle配置Unity Android构建的结构依赖关系。我现在正在导出项目并使用Android Studio来摆脱错误,然后准备自定义工作“mainTemplate.gradle”,以便我可以直接从Unity 5.6构建。 下面是配置的依赖关系为统一建议:Unity 5.6定制Gradle配置与结构

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') 
} 

每个结构文件夹将被视为有其自身配置的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

这是我如何解决这个问题: 默认情况下,每块布料文件夹被视为一个项目但只有“结构”需要被作为处理因为它包含一个“res”文件夹和一个具有所需元数据值的“AndroidManifest.xml”文件。所以我只保留了“结构”作为项目,并将其他依赖项更改为简单的* .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' 
+0

你也可以使用的方法已过时: '安卓{ packageBuildConfig = FALSE' – JohnTube

0

您可以通过改变只有一个文件(不含布修改)禁止代BuildConfig Java类。把这个在插件/安卓/ 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 
    } 
} 

}