Eclipse專案移植到Android Studio時發生META-INF/LICENSE.txt與suport-library-v4/v7內容重覆的問題
當我們想把使用Eclipse寫的code移植到Android Studio來開發,如果有當初在Eclipse把整個專案包成別的專案可以使用的Library(在Properties設定為"is Library"),整合之後程式碼都沒有出錯,但要Build apk時就有可能會看到類似的錯誤訊息:
接下來還有可能會發生為了解決65k Methods問題而加入multidex卻產生了另一個又是重覆的錯誤訊息:
解決的方法是在Gradle裡面加上:
提供本例修改之後的Android Studio Library專案的Gradle作為參考:
Reference:
http://stackoverflow.com/questions/31912459/duplicate-lib-file-copied-in-apk-meta-inf-license-txt-error-in-andorid-studio
Error:Execution failed for task ':library:tools:transformResourcesWithMergeJavaResForRelease'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE.txt
File1:~/…/[ProjectName]/library/tools/libs/httpcore-4.1.4.jar
File2:~/…/[ProjectName]/library/tools/libs/httpclient-4.1.3.jar
File3:~/…/[ProjectName]/library/tools/libs/httpmime-4.1.3.jar
解決的方法是在Gradle裡面加上:
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
但是要看發生重覆的檔案位置在哪,本例在Android Studio建立一個Library Project來放置當初在Eclipse的is Library Project,而出現重覆的地方是訊息指出的那三個jar檔,也是在Android Studio的Library專案(Library Project)裡面,所以要把上述的packagingOptions區塊寫在Library專案的Gradle檔案裡。
接下來還有可能會發生為了解決65k Methods問題而加入multidex卻產生了另一個又是重覆的錯誤訊息:
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/InterpolatorRes.class
解決的方法是在Gradle裡面加上:
dependencies {
compile ('com.android.support:support-v4:21.0.0'){
exclude module: 'support-annotations'
}
}
提供本例修改之後的Android Studio Library專案的Gradle作為參考:
apply plugin: 'android-library'
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
compileSdkVersion 21
buildToolsVersion '22.0.1'
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile ('com.android.support:support-v4:21.0.0'){
exclude module: 'support-annotations'
}
}
Reference:
http://stackoverflow.com/questions/31912459/duplicate-lib-file-copied-in-apk-meta-inf-license-txt-error-in-andorid-studio
留言
張貼留言