Tom*_*mCB 5 android android-productflavors
我正在尝试制作两种风格的应用程序。
摇篮:
defaultConfig {
applicationId "be.myname.firstapp"
minSdkVersion 15
targetSdkVersion 23 }
productFlavors {
raterate {
applicationId = "be.myname.firstapp"
}
scarsforlife {
applicationId = "be.myname.secondapp"
}
}
Run Code Online (Sandbox Code Playgroud)
我的主文件夹、fistapp 文件夹和 secondaryapp 文件夹中有一个 AndroidManifest。
第一个文件夹中的包名称:be.myname.fistapp,第二个文件夹中的包名称:be.myname.secondapp。
在主文件夹中,我首先有:be.myname.firstapp,但这与 be.myname.secondapp 冲突。现在我尝试了:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="${packageId}">
</manifest>
Run Code Online (Sandbox Code Playgroud)
并得到这个:
Attribute manifest@package at AndroidManifest.xml:3:5-27 requires a placeholder substitution but no value for <packageId> is provided.
AndroidManifest.xml Error:
Overlay manifest:package attribute declared at AndroidManifest.xml:3:5-45 value=(be.myname.secondapp)
has a different value=(be.myname.secondapp) declared in main manifest at AndroidManifest.xml:3:5-27
Suggestion: remove the overlay declaration at AndroidManifest.xml and place it in the build.gradle:
flavorName {
applicationId = "be.myname.secondapp"
}
Run Code Online (Sandbox Code Playgroud)
我现在很困惑。这样做的正确方法是什么?:)
您不需要AndroidManifest.xml为每种口味修改包。
引用来自tools.android.com:
因此,我们解耦了包名的两种用法:
- 您构建的 .apk 清单中使用的最终包是您的应用程序在您的设备和 Google Play 商店中的名称,即“应用程序 ID”。
- 在源代码中用于引用 R 类并解析任何相关活动/服务注册的包仍称为“包”。
您可以在 gradle 文件中指定应用程序 ID,如下所示:
应用程序/build.gradle:
Run Code Online (Sandbox Code Playgroud)apply plugin: 'com.android.application' android { compileSdkVersion 19 buildToolsVersion "19.1" defaultConfig { applicationId "com.example.my.app" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName "1.0" } ...和以前一样,您需要在 Manifest 文件中指定代码使用的包,如上面的 AndroidManifest.xml 示例所示。
关键部分来了:完成上述操作后,这两个包是独立的。您可以完全自由地重构您的代码 - 更改用于您的活动和服务的内部包、更新您的 Manifest 包以及重构您的导入语句。这不会影响应用程序的最终 ID,它现在始终是 Gradle 文件中指定的 applicationId。
| 归档时间: |
|
| 查看次数: |
4849 次 |
| 最近记录: |