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

佩戴应用程序,并使用applicationIdSuffix定制构建类型

童浩言
2023-03-14

我有一个应用程序,我想添加一个Android穿戴应用程序扩展。主应用程序有三种构建类型(调试、测试版和发布版)。测试版有一个<代码>应用程序IdSuffix,它允许我在同一设备上并行安装游戏商店版本和当前开发版本。在我添加穿戴应用程序之前,这一切都很好。

主应用的构建。gradle看起来像这样:

apply plugin: 'com.android.application'

android {
    ...
    defaultConfig {
        ...
        applicationId "com.example.mainApp"
        ...
    }
    buildTypes {
        debug {
            applicationIdSuffix '.debug'                
        }
        beta {
            applicationIdSuffix '.beta'
        }
        release {
        }
    }
}

dependencies {
    ...
    wearApp project(':wear')
}

Wear-App具有相同的构建类型和相同的应用程序IdSuffix值。但是,当我构建测试版应用程序时(通过调用gradle assembleBeta),构建过程会构建:磨损:assembleRelise而不是:磨损:assembleBeta,这就是为什么我在构建过程中会收到以下错误消息

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:handleBetaMicroApk'.
> The main and the micro apps do not have the same package name.

在使用build typebeta打包主应用程序时,我如何告诉构建过程构建正确的构建类型?

共有3个答案

华建同
2023-03-14

更新现在有官方对构建变体的支持(见Cyril Leroux的回答)。因此不建议使用这个答案。

我发现了一个非常(非常)丑陋的解决方案,它有一些缺点,但暂时有效,直到支持为穿戴应用程序构建变体。

我在rootProject中设置了一个全局变量,其中包含当前构建的主应用程序的applicationisuffix

build中。我在主应用程序的gradle中添加了以下内容:

// Set a global variable, depending on the currently built build-type.
// This allows us to set the applicationIdSuffix of the wear app depending on
// the build-type of the main app.
android.applicationVariants.all { variant ->
    def task = variant.checkManifest
    def suffix = variant.buildType.applicationIdSuffix
    task.doLast {
        rootProject.ext.currentApplicationIdSuffix = suffix
    }
}

在磨损应用程序的build.gradle中,我添加了以下剪切:

android.applicationVariants.all { variant ->
    def task = variant.generateBuildConfig
    task.dependsOn(propagateApplicationIdSuffix)
}


task propagateApplicationIdSuffix << {
    project.android.buildTypes.all { type ->
        if (rootProject.hasProperty('currentApplicationIdSuffix')) {
            type.applicationIdSuffix = rootProject.ext.currentApplicationIdSuffix
        }
    }
}

这有几个缺点:

  1. 您不能构建多个变体(即gradle assembleBeta assembleRelise),因为磨损应用程序仅构建一次,因此第二个构建类型失败
  2. gradle检查由于原因1而失败
  3. 磨损应用程序仍然使用构建类型发布构建,但包名只是根据主应用程序的应用程序id后缀进行更改

何向荣
2023-03-14

你不能做你想做的事;模块的构建变量不会传播到构建时依赖模块的构建。这是在https://code.google.com/p/android/issues/detail?id=52962

正如http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication中所述,有一种机制可以让一个模块依赖于另一个模块的特定变体,但我不认为这种机制可以扩展到对穿戴应用程序进行差异打包。

阎伟志
2023-03-14

下面是Scott Barta发布的链接(http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-图书馆出版物)我想到了这个:

在建造中。磨损应用程序的渐变,添加publishNonDefault true(发布所有变体):

android {
    publishNonDefault true
}

在建造中。主应用程序的渐变,
替换

wearApp project(':wear')

通过

debugWearApp project(path:':wear', configuration: 'debug')
releaseWearApp project(path:':wear', configuration: 'release')
 类似资料:
  • 针对运动而设计的智能手表内置心率传感器,该传感器可通过手腕测量心率。为了准确测量基于手腕的心率,您需要将表带紧贴地佩戴在手腕上并紧挨着腕骨后方,让显示屏朝上。传感器必须接触皮肤,但表带不应过紧,避免阻碍血液流动。 未进行训练时您应将表带放松些佩戴,就像您佩戴普通的手表。不过在训练时应佩戴得紧些以确保您从手腕获得准确的心率读数。如果您的手腕皮肤上有刺青,由于刺青可能影响准确读数,应避免将传感器直接放

  • Polar Verity Sense 可让您在进行任何运动时实现完全自由移动。您可以将它与臂带、游泳镜带夹配合使用,也可以将它紧贴在皮肤上使用。 使用臂带戴在手臂上 要在使用臂带时准确测量心率,您需要将 Verity Sense 紧紧戴在您的前臂或上臂上,而不是手腕上。 将传感器放入臂带固定器中,让 LED 感应器朝上。 佩戴臂带,使传感器位于臂带下方,紧贴皮肤。 将臂带中的 Verity Sen

  • A370 持续测量来自手腕的心率(日常佩戴和运动中)。要获得准确的心率读数,请按照以下提示令手腕感觉舒适。 在日常佩戴中,将腕带紧贴佩戴在手腕上,在腕骨后。请勿将健身手环佩戴在腕骨之上。可以稍微松开腕带,只要背面的传感器接触到皮肤并在运动时能够保持原位。 当您开始训练时,请稍微拉紧一点,以使运动时传感器不会移动。腕带不应会令您感到不舒服。记得在训练后松开腕带,以便佩戴更舒适。 如果您的手腕皮肤上有

  • 当尝试运行或调试带有applicationIdSuffix(.debug)的自定义BuildType时,手机上安装了应用程序,但正确的活动实际上并没有启动。实际上,启动了具有原始包名的活动(示例:在应该启动com.fobbymaster.app.debug时启动了com.fobbymaster.app)。 我在想,有一些配置需要修改,但我似乎找不到。 有什么想法吗? 设备SHELL命令:pm in

  • 我正在尝试开发一款手机 对于这个应用程序,我想在通知中添加一些操作。

  • 一个普通的应用程序由以下文件组成: 二进制文件 这个安装在 /usr/bin。 一个桌面文件 这个桌面文件向shell提供关于这个程序的重要信息,例如名称、图标、D-Bus名称,启动的命令行。安装在 /usr/share/applications. 一个图标 这个图标安装在 /usr/share/icons/hicolor/48x48/apps, 无论当前背景是什么系统都会到这里查找图标。 一个设