free
flavor中的AndroidManifest.xml
如下所示:<?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>
在main
版本中的AndroidManifest.xml
文件没有使用权限,但包含了所有版本共享的其他清单代码。
pro
版本中的AndroidManifest.xml
如下所示:
<?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定义了两种flavor,例如:
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'
}
}
我期望的结果是不同的 flavor 定义了不同的 uses-permission 权限,但事实并非如此。目前的结果是两个 flavor 都只定义了在 pro flavor 的 AndroidManifest.xml 中定义的 。
我已经尝试过:
- 清理项目 - 重新构建项目 - 重启 Android Studio - 同步 Gradle 但都没有成功。我该怎么解决? 感谢任何帮助。
编辑1:
我将每个 flavor 的 AndroidManifest.xml 文件的位置从各自的 res 文件夹更改为 free 和 pro 文件夹。这样做的结果是:
- Pro flavor 显示了预期的许可证权限。 - 免费 flavor 显示了来自两个 AndroidManifest.xml 文件的权限:许可证和网络权限(应该只有网络权限)。
这感觉像是一个项目结构的问题。怎么解决?
编辑2:
我按照 Commonsware 的提示提取了合并报告,以下是与 uses-permissions 相关的报告:
Free:
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
app/build/output/apk/
中的清单合并报告,了解它们告诉你什么。 - CommonsWaremain
、一个口味的源集还是一个构建类型的源集。"这意味着什么?" - 我重申之前的建议:查看app/build/output/apk/
中的清单合并报告,并查看它们告诉您的内容。 - CommonsWaretools:node
应该可以。请查看我发布的链接。也许将所有权限添加到主清单中,并从各个文件中使用<permission android:name="name" tools:node="remove"
删除不需要的权限。 - BudiusqwknoteGIT:licencing-library
正在请求CHECK_LICENSE
。如果你没有在所有flavors中使用该库,请使用带有flavor的compile
语句(例如proCompile
)仅在该flavor中使用该库。 - CommonsWare