Android,如何为特定的风味(flavor)排除特定权限(permission)?

3

我在我的Android项目中有10种不同的flavors:fl1,fl2,...,fl10,并且每个flavor都有以下权限。现在我想让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"}       
}

这个回答解决了你的问题吗?使用Gradle产品风格删除AndroidManifest元素 - Mir Milad Hosseiny
看看这个 https://developer.android.com/studio/build/manifest-merge - Squti
谢谢建议。我都试过了,但还是无法得到结果。我不知道我犯了什么错误。@MirMiladHosseiny - sajjad
2个回答

5

我已经做了,但是权限在那个版本中仍然存在。我需要再做些什么吗? - sajjad
我已经分享了它们。 - sajjad
你是否在正确的路径下找到了 fl5/AndroidManifest.xml 文件? - Mir Milad Hosseiny
是的。因为当我在fl5清单中添加权限时,它可以正常工作。 - sajjad
让我们在聊天中继续这个讨论 - Mir Milad Hosseiny
显示剩余3条评论

3

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

例如,fl1清单(位于 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>  

位于 app/src/fl2/AndroidManifest.xml 的 fl2清单应该如下所示:
<?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)应该像往常一样,但不包含权限:
<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>  

1
维护很困难。 - Mir Milad Hosseiny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接