2017-04-17 30 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 
    } 
} 

}