Android Studio 两种具有不同 list 文件的风格

标签 android android-studio android-manifest android-gradle-plugin

我在 Android Studio 中为我的风格定义两个不同的 list 文件时遇到问题。这是我目前的项目结构:

Current project structure

AndroidManifest.xmlfree味道是这样的:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="se.example.package">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>

AndroidManifest.xmlmain flavor 没有使用权限,但包含在所有 flavor 之间共享的 list 代码的其余部分。

AndroidManifest.xmlpro味道是这样的:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="se.example.package">
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" />
</manifest>

build.gradle 定义了两种风格,如

productFlavors {
    free {
        applicationId 'se.example.package.free'
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName '1.0'
    }
    pro {
        minSdkVersion 14
        applicationId 'se.example.package.pro'
        targetSdkVersion 21
        versionCode 2
        versionName '1.1'
    }
}

我期望的结果是不同的风格定义了不同的使用权限。 事实并非如此。结果是目前这两种风格都只定义了<uses-permission android:name="com.android.vending.CHECK_LICENSE" />定义见 AndroidManifest.xml在专业的味道。

我试过了:

  • 清理项目
  • 重建项目
  • 重启 Android Studio
  • 同步分级

但没有成功。我该如何解决这个问题?任何帮助表示赞赏。

编辑 1

我更改了每种口味的位置AndroidManifest.xml来自每个 res 的文件文件夹到 freepro文件夹。结果:

  1. 专业版按预期显示许可权限。
  2. 免费版本显示来自 AndroidManifest.xml 的权限 文件、许可和网络权限(应仅是网络)

这感觉像是项目结构的问题。这是怎么回事?

编辑 2

我按照 Commonsware 的提示提取了合并报告,这些是关于 uses-permissions 的报告

免费:

uses-permission#com.android.vending.CHECK_LICENSE
ADDED from qwknoteGIT:licencing-library:unspecified:26:5
    android:name
        ADDED from qwknoteGIT:licencing-library:unspecified:26:22

专业版:

uses-permission#com.android.vending.CHECK_LICENSE
MERGED from qwknoteGIT:licencing-library:unspecified:26:5

最佳答案

技术背景:

在此链接上,它解释了可用于 list 合并的技术和参数:https://developer.android.com/studio/build/manage-manifests#merge_rule_markers

一个具体的例子是 tools:node,它指出 list 上的某些 XML 节点在合并时应该如何表现。

解决方案:

要在一个 list 中实现某些权限并在其他 list 中实现不同,请将您需要的所有权限添加到 main 并在 flavor list 中删除您不需要的权限,如下例所示:

免费删除检查许可证

<uses-permission
   android:name="com.android.vending.CHECK_LICENSE" 
   tools:node="remove"/>

关于Android Studio 两种具有不同 list 文件的风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28478110/

相关文章:

java - Android Studio 游戏不使用整个 Android 显示屏

android - 如何在 Android Studio 3.1.3 中查看 Kotlin 中有趣的源代码?

android - 某些应用程序缺少自动撤销权限设置面板(Android 11 API/系统)

android - 如何创建一个 gui 来显示收到的短信?

android - 在方向更改时保留 DialogFragment 状态

android - 如何使用 flutter dio 下载文件?

java - 下面的代码是什么意思?

android - 如何在不替换项目的情况下在一个 Recyclerview 中添加两个自定义行?

android - Jetpack 组成 : Pending composition has not been applied when rememberSaveable is used

java - Android list 不启动 Activity