首页 > 解决方案 > Android,如何排除特定风味的特定权限?

问题描述

所以我的 android 项目中有 10 种口味:fl1、fl2、...、fl10,具有以下权限。现在我希望我的 fl5 没有android.permission.REQUEST_INSTALL_PACKAGES. 这该怎么做?

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

我知道我可以在fl5/AndroidManifest.xml. 它可以包含此特定构建的任何过多元素。但这可能是错误和错误的来源,因为我每次向主清单添加元素时都应该小心同步。

我已经搜索并找到了不同的解决方案。但我无法在我的项目中实现它们,因为它们并不精确。任何帮助表示赞赏。

这是我的 fl5/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mycompany.myapp">

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"></uses-permission >

这是我在build.gradle文件中的口味:

  productFlavors {
    fl1 {flavorDimensions "in_1"}
    fl2 {flavorDimensions "in_2"}
    fl3 {flavorDimensions "in_3"}
    fl4 {flavorDimensions "in_4"}
    fl5 {flavorDimensions "in_5"}  
    fl6 {flavorDimensions "in_6"}
    fl7 {flavorDimensions "in_7"}
    fl8 {flavorDimensions "in_8"}
    fl9 {flavorDimensions "in_9"}
    fl10 {flavorDimensions "in_10"}       
}

标签: androidandroid-manifestandroid-productflavors

解决方案


最好和最简单的方法是为每种风格创建不同的 AndroidManifest。为了减少冗余,您可以在包含所有活动、服务等的主文件夹下创建一个 AndroidManifest,并在每个风味的包含该风味的权限的文件夹下分离 AndroidManifest。

例如,fl1 Manifest(位于app/src/fl1/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" />
</manifest>  

fl2 清单(位于app/src/fl2/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.WRITE_EXTERNAL_STORAGE" />
</manifest>  

主 AndroidManifest 文件(位于app/src/main/AndroidManifest.xml)应该看起来像 always 但没有权限:

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

推荐阅读