在Android Studio中如何为每个产品添加不同的Manifest文件?



我有两种产品口味。下面是应用gradle:

flavorDimensions "default"
productFlavors{
publicVersion{
dimension "default"
}
privateVersion{
dimension "default"
}
}

我希望每种风格都有不同的Manifest文件。所以我创建了一个Manifest文件与路径src/publicVersion/AndroidManifest.xml和路径src/privateVersion/AndroidManifest.xml不同的一个,然后我删除了主Manifest文件。

在我这样做之后,什么都不起作用。Android Studio仍然要求在主目录中有一个Manifest文件。我在SO上尝试了所有的答案(比如使用"sourceset")。在应用程序的gradle文件),但他们没有工作。也许最近的Android Studio更新改变了这种做法?

OPTION 1

每种口味都有AndroidManifest.xml

  • 应用程序/src/flavor1/AndroidManifest.xml
  • 应用程序/src/flavor2/AndroidManifest.xml
  • 应用程序/src/flavor3/AndroidManifest.xml

选项2

将权限移动到产品风味相关的AndroidManifest.xml中,并将活动和所有其他公共信息保留在一个核心AndroidManifest.xml

app/src/main/AndroidManifest.xml包含活动的常用信息,但没有权限

<manifest  
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- permissions are imported via brand-specific AndroidManifest.xml -->
<!-- common manifest elements -->
<application
android:name=".ui.FSApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<!-- activities -->
<activity
android:name=".ui.activities.SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".ui.activities.SecondActivity/>
<!-- receiver ->
<receiver android:name=".receiver.BlogPostReceiver"/>
</application>
</manifest>  

app/src/flavor1/AndroidManifest.xml只包含flavor1产品flavor的权限

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android">  
<uses-permission android:name="android.permission.INTERNET" />
</manifest>  

app/src/flavor2/AndroidManifest.xml中的flavor2也是如此

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android">  
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest> 

查看更多信息

您可以覆盖单个风味的完整清单或仅定义风味中的特色(IMHO更好)。如果您只添加一种风格的权限,那么您只需要在那里有一个带有此单一权限的清单,并且它将与主权限合并。如果你想修改一个xml标签,你可以使用tools:node="merge"tools:node="replace"

最新更新