首页 > 解决方案 > 在 Android Studio 中,如何为每种产品风格添加不同的 Manifest 文件?

问题描述

我有两种产品口味。这是应用程序gradle:

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

我想要每种口味都有一个不同的清单文件。所以我创建了一个路径为 src/publicVersion/AndroidManifest.xml 的清单文件和另一个路径为 src/privateVersion/AndroidManifest.xml 的清单文件,然后我删除了主清单文件。

在我这样做之后,没有任何效果。Android Studio 仍然要求在主目录中有一个 Manifest 文件。我尝试了所有关于 SO 的答案(比如在应用程序 gradle 文件中使用“sourceSet”),但它们没有用。也许最近的 Android Studio 更新改变了这样做的方式?

标签: androidandroid-studio

解决方案


选项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 产品风味的权限

<?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>  

同样对于 flavor2 中app/src/flavor2/AndroidManifest.xml

<?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> 

有关更多信息,请查看


推荐阅读