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
文件中的口味:
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"}
}
在您的元素中添加 tools:node="remove"
。在您的情况下,在 fl5/AndroidManifest.xml
.
中添加以下行
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"/>
看看 Removing AndroidManifest element with gradle product flavors and 个问题。
最好和最简单的方法是为每种风格创建不同的 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>
所以我的 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"}
}
在您的元素中添加 tools:node="remove"
。在您的情况下,在 fl5/AndroidManifest.xml
.
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"/>
看看 Removing AndroidManifest element with gradle product flavors and
最好和最简单的方法是为每种风格创建不同的 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>