簡體   English   中英

Android,如何排除特定風味的特定權限?

[英]Android, how to exclude a specific permission for a specific flavor?

所以我的 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文件中的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"}       
}

最好和最簡單的方法是為每種風格創建一個不同的 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>  

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 )應該看起來像總是但沒有權限:

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

在您的元素中添加tools:node="remove" 在您的情況下,在fl5/AndroidManifest.xml添加以下行。

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

查看使用 gradle 產品風味刪除 AndroidManifest 元素以及如何在使用 gradle 構建 Android 應用程序時刪除特定權限? 問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM