次のプロジェクト設定を実現するために、gradle/android studio で製品バリアントを使用しています。
- 1 つの Android Studio プロジェクトで 80% 類似している 2 つのアプリ。
- 各アプリには独自のマニフェスト パッケージ パスが必要です (基本的に、独自の Google API とプッシュ キーを使用して、2 つの独立したアプリのように動作する必要があります)。
これを達成するために複数のチュートリアル(プレースホルダー、複数のマニフェスト)に従いましたが、何も機能しません。
このチュートリアルに続いて、次のことを行いました 。
私のbuild.gradle:
android {
compileSdkVersion 19
buildToolsVersion '20'
defaultConfig {
minSdkVersion 10
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
productFlavors {
app1 {
packageName "com.test.app1"
//applicationId "com.test.app1"
}
app2 {
packageName "com.test.app2"
//applicationId "com.test.app2"
}
}}
そしてここに私のマニフェストファイルがあります。
ソース/メイン/マニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<application>
</application>
ソース/app1/マニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name="com.test.app1”
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.test.app1.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
ソース/app2/マニフェスト:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name="com.test.app2”
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.test.app2.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
これにより、次のエラーメッセージが表示されます。
Manifest merger failed : Main AndroidManifest.xml at AndroidManifest.xml manifest:package attribute is not declared
残念ながら、アプリには異なるパッケージ パスが必要なため、個々のマニフェスト タグにパッケージを設定することはできません。とにかくそれを行うと、パッケージの値が異なるため、マージはマニフェストファイルをマージできません。packageName に加えて、「applicationId」も設定しようとしましたが、これも機能しません。このようなプレースホルダーを使用してpackage="${applicationId}"
も、変数値が解決されないため機能しません。
この問題を解決する方法はありますか? 私はgradle 0.12.2でAndroid Studio 0.8.2を使用しています