我在gradle /
android studio中使用Product Variants来实现以下项目设置:
>两个应用程序,在一个Android工作室项目中80%相似.
>每个应用程序应该有自己的清单包路径(它们应该基本上像两个独立的应用程序 – 使用它自己的谷歌API和推送键)
在我试图实现这个目标(占位符,多个清单)时,我遵循了多个教程但没有任何作用.
在本教程之后,我做了以下内容:
http://www.kevinrschultz.com/blog/2014/03/23/using-android-content-providers-with-multiple-package-names/
我的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" } }}
在这里我的清单文件.
的src / main /清单:
<?xml version="1.0" encoding="utf-8"?>
<application> </application>
SRC / 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>
SRC / APP 2 /清单:
<?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}”的占位符不起作用,因为它不解析变量值.