Tôi đã nhân bản một kho lưu trữ github vì tôi muốn nghiên cứu mã, nhưng khi tôi cố gắng xây dựng nó trong Android Studio, tôi đã gặp một số rắc rối. Sau khi thêm kho lưu trữ google maven (như được nhắc bởi Android Studio) và cập nhật cả Phiên bản Plugin Gradle và Phiên bản lớp (tương ứng với 3.5.2 và 5.4.1), quá trình xây dựng không thành công do lỗi sau:
Nguyên nhân: mục nhập trùng lặp: META-INF / MANIFEST.MF
Và điều này, để cụ thể hơn:
Nguyên nhân do: java.util.zip.ZipException: mục trùng lặp: META-INF / MANIFEST.MF
Đây là tập tin build.gradle cấp dự án của tôi:
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com'
}
}
}
Đây là tập tin build.gradle mô-đun của tôi (trước khi thử bất cứ điều gì):
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.thelittlenaruto.supportdesignexample"
minSdkVersion 11
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ('com.android.support:appcompat-v7:22.2.1')
implementation ('com.android.support:design:22.2.1')
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
}
Đây là những gì tôi đã thử cho đến nay:
- Thêm phần sau vào phần android của tệp build.gradle mô-đun của tôi:
sourceSets {
main{
java{
exclude '**/META-INF/MANIFEST'
exclude '**/META-INF/MANIFEST.MF'
exclude 'META-INF/MANIFEST'
exclude 'META-INF/MANIFEST.MF'
exclude '!META-INF/MANIFEST.MF'
}
}
}
- Thêm điều này:
sourceSets.main.res.filter.exclude 'META-INF/MANIFEST'
sourceSets.main.res.filter.exclude 'META-INF/MANIFEST.MF'
- Ngoài ra này:
packagingOptions {
apply plugin: 'project-report'
exclude '**/META-INF/MANIFEST'
exclude '**/META-INF/MANIFEST.MF'
exclude 'META-INF/MANIFEST'
exclude 'META-INF/MANIFEST.MF'
exclude '!META-INF/MANIFEST.MF'
}
- Và điều này:
packagingOptions {
pickFirst '**/META-INF/MANIFEST'
pickFirst '**/META-INF/MANIFEST.MF'
pickFirst 'META-INF/MANIFEST'
pickFirst 'META-INF/MANIFEST.MF'
pickFirst '!META-INF/MANIFEST.MF'
}
- Điều này:
aaptOptions {
ignoreAssetsPattern "!META-INF/MANIFEST.MF"
ignoreAssetsPattern "META-INF/MANIFEST.MF"
}
Tôi nghĩ rằng tôi đã thử hầu hết mọi thứ trong câu hỏi này: Làm cách nào để loại trừ một số tệp nhất định khỏi các bản dựng lớp của Android Studio?
Không có gì làm việc.
Sau khi tìm kiếm một giải pháp, tôi nghĩ vấn đề là tôi đã bị trùng lặp phụ thuộc. Vì vậy, tôi đã thử như sau:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ('com.android.support:appcompat-v7:22.2.1'){
exclude module: 'support-v4'
}
implementation ('com.android.support:design:22.2.1')
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
}
Và điều này:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation ('com.android.support:design:22.2.1'){
exclude module: 'support-v7'
}
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
}
Tôi vẫn nhận được lỗi tương tự.
Bất cứ ai có thể xin vui lòng cho tôi biết những gì tôi đang làm sai? Cảm ơn bạn trong dự đoán. :)