android – 产品变体:多个活动

我在gradle / android studio中使用Product Variants来实现以下项目设置:

>两个应用程序,在一个Android工作室项目中80%相似.
>每个应用程序应该有自己的清单包路径(它们应该基本上像两个独立的应用程序 – 使用它自己的谷歌API和推送键)

在我试图实现这个目标(占位符,多个清单)时,我遵循了多个教程但没有任何作用.

在本教程之后,我做了以下内容
http://www.kevinrschultz.com/blog/2014/03/23/using-android-content-providers-with-multiple-package-names/

我的build.gradle:

android {
compileSdkVersion 19
buildToolsversion '20'

defaultConfig {
    minSdkVersion 10
    targetSdkVersion 19
    versionCode 1
    versionName "1.0"
}

buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.txt'
    }
}

productFlavors {
    app1 {
        packageName "com.test.app1"
        //applicationId "com.test.app1"
    }

    app2 {
        packageName "com.test.app2"
        //applicationId "com.test.app2"
    }
}}

在这里我的清单文件.

的src / main /清单:

<?xml version="1.0" encoding="utf-8"?>
<application>
</application>

SRC / APP1 /清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:name="com.test.app1”
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name="com.test.app1.MainActivity"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:screenorientation="portrait" >
        </activity>
    </application>
</manifest>

SRC / APP 2 /清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:name="com.test.app2”
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name="com.test.app2.MainActivity"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:screenorientation="portrait" >
        </activity>
    </application>
</manifest>

这给了我以下错误消息:

Manifest merger Failed : Main AndroidManifest.xml at AndroidManifest.xml manifest:package attribute is not declared

不幸的是,由于我的应用程序需要不同的包路径,因此无法为每个单独的清单标记设置包.如果我仍然这样做,合并将无法合并清单文件,因为不同的包值.除了packageName我还尝试设置“applicationId”,但这也不起作用.使用像这个package =“${applicationId}”的占位符不起作用,因为它不解析变量值.

任何想法如何解决这个问题?我正在使用带有gradle 0.12.2的Android Studio 0.8.2

解决方法

你可以安全地添加
<manifest xmlns:android="..."
  package="com.test.app">
</manifest>

在你的主要清单中.

但是你必须在build.gradle中使用applicationId而不是packageName.
build.gradle的applicationId将在您的不同构建期间覆盖此值.

更好的方法是使用applicationIdSuffix而不是applicationId来实现不同的产品风格.

该字段必须存在于您的主清单中.

相关文章

###实现效果*本实例主要实现用ViewPage和Fragment实现选项卡...
一、安装 JDK 下载JDK最新版本,下载地址如下: http://www....
这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...