Trong build.gradle
, tôi đã hương vị sản phẩm thiết lập:Android, Gradle, hương vị sản phẩm và manifest
productFlavors
{
AlternateFlavour
{
applicationId "com.myapp.alternateflavour"
}
}
Sau đó, trong phần sourceSets, tôi sử dụng tài nguyên khác nhau, tài sản và danh bạ manifest cho những hương vị:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
AlternateFlavour {
manifest.srcFile 'manifest-tmp/AlternateFlavour/AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res-tmp/AlternateFlavour']
assets.srcDirs = ['assets-tmp/AlternateFlavour']
}
}
OK cho đến thời điểm này.
Trong manifest mà được sử dụng bởi các hương vị, đó là một phần tự động tạo ra, tôi có:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.myapp"
android:versionCode="1010001"
android:versionName="V1.1.0.1" >
nhưng trong biểu hiện ban đầu trong dự án gốc như sau:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.myapp"
android:versionCode="1010000"
android:versionName="V1.1.0.DEBUG" >
Điều này khiến Gradle không thành công:
Error:
Attribute [email protected] value=(1010001) from AndroidManifest.xml:4:5-28
is also present at AndroidManifest.xml:4:5-28 value=(1010000).
Attributes of <manifest> elements are not merged.
Tại sao nó cố gắng hợp nhất e với bản kê khai ban đầu ở tất cả, khi tôi đã chỉ định nó nên tìm ở nơi khác?
Và làm cách nào tôi có thể dừng điều này?
Tôi hy vọng một số người sẽ hỏi tại sao tôi làm theo cách này, hoặc thực sự tại sao tôi không sử dụng cấu trúc dự án hương vị được đề xuất. Vâng, tôi cần một biểu hiện bình thường để sử dụng bên ngoài Gradle, ví dụ: để triển khai từ Eclipse (một điều tại một thời điểm xin vui lòng!) và tôi cũng cần các phiên bản được tiêm bởi quá trình xây dựng.
Vì vậy, trước tiên, có vô số hương vị ở đây - tôi chỉ cố gắng giữ ví dụ đã cho đơn giản. Tôi không thể (AFAIK) loại bỏ các thuộc tính khỏi tệp kê khai ban đầu vì đó là tệp được sử dụng bởi triển khai IDE. Tuy nhiên tôi có thể có thể tạo ra một thứ ba, mà không có các thuộc tính, và có Gradle sử dụng theo mặc định. Có vẻ quá nhiều! –
@RobPridham: "đó là cái được sử dụng bởi triển khai IDE" - nếu bạn đang sử dụng Android Studio, công cụ Phiên bản biến thể kiểm soát những gì được sử dụng bởi IDE. – CommonsWare
Thật vậy. Không có được nêu ra không may - vẫn còn sử dụng Eclipse & ADT cho sự phát triển này, cho một loạt các lý do tốt (mặc dù ít tốt hơn theo thời gian). –