当前位置: 首页 > 知识库问答 >
问题:

在处理产品口味时,main/AndroidManifest.xml中的软件包名称应该是什么?

南宫正阳
2023-03-14

我的产品有两种口味。梯度如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.2"
    aaptOptions.setProperty("cruncherEnabled", false)

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 16
        applicationId "com.example.app"
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

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

    def final myApplicationId = 'com.example.app'
    def final appName = 'app'

    productFlavors {
        dev {

            resValue "string", "app_name", appName
            resValue "string", "APIURL", "http://prod.example.com/"
        }
        production {

            resValue "string", "app_name", appName
            resValue "string", "APIURL", "http://test.example.com/"
        }
    }
    buildTypes{
        dtest {
            applicationIdSuffix ".dev"
        }
        dprod{

        }
    }
}



dependencies {
    compile()
    few libraries
}

我的开发/AndroidManifest。xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app.dev"
    android:installLocation="auto"
    android:versionCode="3"
    android:versionName="3.1">

</manifest>

以及我的产品/AndroidManifest。xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app"
    android:installLocation="auto"
    android:versionCode="3"
    android:versionName="3.1">

</manifest>

我的主/AndroidManifest。xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app"
    android:installLocation="auto"
    android:versionCode="3"
    android:versionName="3.1">
    <application>
          <activity list.. </activity>
    </application>
</manifest>

我想在同一设备中安装dev和production flavor,但即使设置了不同的applicationId,我也无法更改包名。我怀疑我在主清单中提到的包名正在重写构建中的applicationId。格雷德尔以某种方式。如果有人给我指出正确的方向,我将不胜感激。谢谢

共有1个答案

缑兴贤
2023-03-14

而不是在productFlavors中设置它,而是在buildTypes中添加它

使用

buildTypes {
    debug {
        applicationIdSuffix ".dev"
        // Rest of the code block
    }

    release {
        // your code block
    }
}

使现代化

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.2"
    aaptOptions.setProperty("cruncherEnabled", false)

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 16
        applicationId "com.example.app"
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    buildTypes {
        debug{
            applicationIdSuffix ".dev"
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    productFlavors {
        dev {

            resValue "string", "app_name", appName
            resValue "string", "APIURL", "http://prod.example.com/"
        }
        production {

            resValue "string", "app_name", appName
            resValue "string", "APIURL", "http://test.example.com/"
        }
    }
}



dependencies {
    compile()
    few libraries
}
 类似资料:
  • 我必须用Java实现一个日志机制。所以我使用JEE,使用RequestFilter和拦截器。我把所有这些都放在一个叫做日志记录的包中。 我的类是:请求过滤器,响应过滤器和常量 所以我的问题是。因为类名已经存在于包中,所以不记录类名可以吗? 包日志记录和重复日志记录:请求过滤日志记录,响应过滤日志记录,ConstantsLogging

  • 面试贵在知己知彼,咱们在面试之前最好能做一下“押题”,也就是提前想一下面试官可能会问哪些问题,然后在面试之前做好准备。 比如下面给大家简单罗列了20道面试高频问题,仅供参考: 1、简单的先做个自我介绍 好的自我介绍,主要凸显两件事就OK了 第一:我是能做产品经理的; 第二:我想在你们这家公司做产品经理。 我是能做产品经理的该怎么证明呢?通过两个维度:产能技能(需求分析、用户调研、竞品分析、产品设计

  • 问题内容: 我看到了一些无法解释的Proguard行为。 AFAIK proguard不关注android清单。另外,在我的proguard.cfg文件中,我没有提及BroadcastReceiver相关的类。因此,我认为应该删除这些内容。 但是我在bin / proguard.txt中看到了一些奇怪的东西: 并且该类(BroadcastReceiver的后裔)不会被剥离。理性对我没有任何意义:

  • 我正在尝试将我的项目迁移到gradle。我的一个项目有多种产品风格,并且每个项目都必须在其发布版本中使用不同的进行签名。所以这是我到目前为止尝试的: 当我运行时,我得到一个和以下错误消息: 所以我假设。*Gradle脚本的一部分不是放置代码签名配置的正确位置。

  • 问题内容: 我找不到关于SO的Q / A来回答我的 确切 问题,所以我想我将其发布并看看会回来什么。 就Java包的命名约定而言,我知道它应该是反向域名:并且我得到了关于不混合大小写,连字符,关键字等的规则。 我还阅读了Java语言规范的7.7节(唯一包名称)。据我所知,Java的规则是使用反向域来确保唯一性……如果您没有,请去获取一个: -第7.7节 因此,如果我对花钱买一个域名不感兴趣,那么我

  • 本文向大家介绍Perl中的软件包是什么?,包括了Perl中的软件包是什么?的使用技巧和注意事项,需要的朋友参考一下 Perl中的package语句将当前命名上下文切换到指定的命名空间(符号表)。因此- 包是驻留在其自己的命名空间中的代码的集合。 命名空间是唯一变量名称的命名集合(也称为符号表)。 命名空间可防止程序包之间的变量名冲突。 包使模块的构造成为可能,这些模块在使用时不会破坏模块自身命名空