我在 Android Studio 中为我的风格定义两个不同的 list 文件时遇到问题。这是我目前的项目结构:
AndroidManifest.xml
在 free
味道是这样的:
<?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.xml
在 main
flavor 没有使用权限,但包含在所有 flavor 之间共享的 list 代码的其余部分。
AndroidManifest.xml
在 pro
味道是这样的:
<?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
的文件文件夹到 free
和 pro
文件夹。结果:
- 专业版按预期显示许可权限。
- 免费版本显示来自
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/