首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android Studio具有不同清单文件的两种风格

Android Studio具有不同清单文件的两种风格
EN

Stack Overflow用户
提问于 2015-02-12 20:59:13
回答 7查看 50.4K关注 0票数 78

我在Android Studio中为我的口味定义两个不同的清单文件时遇到了问题。这是我目前的项目结构:

free风格中的AndroidManifest.xml如下所示:

代码语言:javascript
复制
<?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如下所示:

代码语言:javascript
复制
<?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定义了两种风格,如

代码语言:javascript
复制
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'
    }
}

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

我试过了:

安卓工作室清洁项目project

  • Restart
  • Rebuild
  • 同步升级

但没有成功。我该如何解决这个问题呢?任何帮助都是非常感谢的。

编辑1个

我将每个风格的AndroidManifest.xml文件的位置从每个res文件夹更改为freepro文件夹。其结果是:

当expected.

  • Free风格显示来自AndroidManifest.xml文件的权限时,
  1. 专业版显示许可权限,许可证和网络权限(应仅为网络权限)

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

编辑2个

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

免费:

代码语言:javascript
复制
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

优点:

代码语言:javascript
复制
uses-permission#com.android.vending.CHECK_LICENSE
MERGED from qwknoteGIT:licencing-library:unspecified:26:5
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-02-12 22:29:44

技术背景:

在这个链接上,它解释了可以用于清单合并的技术和参数:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-tools:node-markers

一个特别的是tools:node,它指出清单上的某些XML节点在合并时应该如何表现。

解决方案:

要在一个清单中实现一些权限,并在另一个清单中实现不同的权限,请向main添加所需的所有权限,并在风格清单中删除不需要的权限,如下例所示:

free删除检查许可证

代码语言:javascript
复制
<uses-permission
   android:name="com.android.vending.CHECK_LICENSE" 
   tools:node="remove"/>
票数 59
EN

Stack Overflow用户

发布于 2015-02-12 23:29:28

你的问题来自于库,而不是你的口味。具体地说,qwknoteGIT:licencing-library正在请求CHECK_LICENSE

如果您没有在所有版本中使用该库,请使用带有风格的compile语句(例如,proCompile),以便仅在该版本中使用该库。

如果您将该库用于所有版本,但又确信在一种版本中不需要权限,则可以在该版本的清单中使用tools:node属性来阻止该库提供的权限。

合并报告是你的朋友。:-)

票数 24
EN

Stack Overflow用户

发布于 2016-02-16 01:28:14

这至少应该解决了问题。我发现它在为每个变体指定确切的清单时很有用。干杯!它显式地指向每个变体文件夹下的清单文件。

代码语言:javascript
复制
    android {
      productFlavors {
        prod {
          manifest.srcFile "prod/AndroidManifest.xml"
        }
        dev {
          manifest.srcFile "dev/AndroidManifest.xml"
        }
      }
      ...

}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28478110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档