Android产品口味清单

3
我是一名初学者,正在开发我的第一个Android应用程序,并开始使用产品风格。我有一个测试版的免费版本,现在开始制作付费版本。我对清单文件有些困惑。
付费版本将拥有一个免费版本没有的活动,并且两个版本将具有不同的权限。我考虑从主清单中删除权限,免费清单中只包含其权限,而付费清单中除了其权限外,还包含额外的活动。
例如,免费清单可能是:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app">

    <uses-permission android:name="android.permission.INTERNET"/>
    </uses-permission>

</manifest>

这是正确的吗?


2
任何共同的权限都可以放在“main”清单中,就像任何共同的组件可以放在“main”清单中一样。否则,您所描述的听起来很好。 - CommonsWare
@CommonsWare 谢谢。实际上,它们没有共同的权限;我应该这么说。 - saulspatz
1个回答

3

这是正确的,然而我建议您将所有通用清单信息放在main中,正如CommonsWare所提到的那样。

此外,作为提示,如果出于任何原因(例如调试)需要替换main清单中的值,我建议使用tools:replace标签,如下所示:

免费版本:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      package="com.example">

    <application
        android:name=".FreeApp"
        android:allowBackup="false"
        tools:replace="allowBackup,name"/>

</manifest>

这将使用清单中的内容替换主要nameallowBackup标记。
如果您还没有了解过Flavoring和Variants,我建议您查看以下链接以获取更多信息: https://developer.android.com/studio/build/build-variants.html

谢谢你的提示。我从你的例子中推断出,当我在付费应用程序中添加新活动时,我应该包括android:name=".PaidApp"或者我在build.gradle文件中使用的任何后缀。我是对的吗? - saulspatz
android:name 标签遵循项目的文件夹结构,而不管 build.gradle 文件中的内容。如果您想了解清单合并以及在此过程中哪个清单具有优先权,这是另一个有用的链接,可以帮助您理解:https://developer.android.com/studio/build/manifest-merge.html - Pablo Baxter
回答你的问题,如果main清单中没有你添加的活动,但是你的paid清单中有,那么你不应该有任何冲突,一切都应该自动合并,没有问题。 - Pablo Baxter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接