我有一个应用程序,我想添加一个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
打包主应用程序时,我如何告诉构建过程构建正确的构建类型?
更新现在有官方对构建变体的支持(见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
}
}
}
这有几个缺点:
您不能构建多个变体(即gradle assembleBeta assembleRelise
),因为磨损应用程序仅构建一次,因此第二个构建类型失败
gradle检查由于原因1而失败
- 磨损应用程序仍然使用构建类型
发布
构建,但包名只是根据主应用程序的应用程序id后缀进行更改
你不能做你想做的事;模块的构建变量不会传播到构建时依赖模块的构建。这是在https://code.google.com/p/android/issues/detail?id=52962
正如http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication中所述,有一种机制可以让一个模块依赖于另一个模块的特定变体,但我不认为这种机制可以扩展到对穿戴应用程序进行差异打包。
下面是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, 无论当前背景是什么系统都会到这里查找图标。 一个设