android - 如何自动将APK从手机推送到Wear?

标签 android apk wear-os android-sdk-tools android-install-apk

这是我在 Stack Overflow 上的第一个问题,如果我应该以不同的格式设置它,请告诉我。

我正在编写一个 Android 移动(电话)应用程序,它将与配套的 Android Wear( watch )应用程序进行交互。当我直接通过 adb 安装时,这两个应用程序都可以工作。我正在尝试创建一个 APK,它将通过电子邮件附件安装到手机上,并自动将配套应用推送到我的 watch 。但是,当我创建 APK 并通过电子邮件附件进行安装时,此 APK 并未成功将配套应用推送到我的 watch 。

当我通过 $ adb -d logcat | 读取安装日志时grep 1329,我得到以下结果(如下)。有人会碰巧知道我做错了什么吗?我试图在线查找错误消息,但没有找到任何有用的信息。

D/ResourcesManager( 1329): creating new AssetManager and set to /data/app/com.google.android.gm-2/base.apk
D/skia    ( 1329): --- SkImageDecoder::Factory returned null
W/AssetUtil( 1329): loadBitmapAssetFromResources: failed to decode bitmap resource for package com.google.android.gm
D/skia    ( 1329): --- SkImageDecoder::Factory returned null
W/AssetUtil( 1329): loadBitmapAssetFromResources: failed to decode bitmap resource for package com.google.android.gm
I/art     ( 1329): Background partial concurrent mark sweep GC freed 72449(3MB) AllocSpace objects, 22(5MB) LOS objects, 40% free, 18MB/31MB, paused 1.452ms total 197.557ms
D/ResourcesManager( 1329): creating new AssetManager and set to /system/priv-app/SecDownloadProvider/SecDownloadProvider.apk
W/ResourceType( 1329): No package identifier when getting value for resource number 0x00000000
W/PackageManager( 1329): Failure retrieving resources for com.android.providers.downloads: Resource ID #0x0
D/ResourcesManager( 1329): creating new AssetManager and set to /data/app/com.slightlyrobot.motion_record_phone_and_wear-2/base.apk
I/WearablePkgInstaller( 1329): Setting DataItem to install wearable apps for com.slightlyrobot.motion_record_phone_and_wear
D/ResourcesManager( 1329): creating new AssetManager and set to /data/app/com.slightlyrobot.motion_record_phone_and_wear-1/base.apk
I/WearablePkgInstaller( 1329): Companion package metadata matches, not requesting installs for com.slightlyrobot.motion_record_phone_and_wear
I/art     ( 1329): Explicit concurrent mark sweep GC freed 59365(2MB) AllocSpace objects, 4(1013KB) LOS objects, 39% free, 18MB/31MB, paused 699us total 161.260ms
D/ResourcesManager( 1329): creating new AssetManager and set to /data/app/com.google.android.gm-2/base.apk
D/skia    ( 1329): --- SkImageDecoder::Factory returned null
W/AssetUtil( 1329): loadBitmapAssetFromResources: failed to decode bitmap resource for package com.google.android.gm
D/skia    ( 1329): --- SkImageDecoder::Factory returned null
W/AssetUtil( 1329): loadBitmapAssetFromResources: failed to decode bitmap resource for package com.google.android.gm
D/ResourcesManager( 1329): creating new AssetManager and set to /system/priv-app/SecDownloadProvider/SecDownloadProvider.apk
W/ResourcesManager( 1329): Asset path '/system/framework/secsmartcard.jar' does not exist or contains no resources.
W/ResourceType( 1329): No package identifier when getting value for resource number 0x00000000
W/PackageManager( 1329): Failure retrieving resources for com.android.providers.downloads: Resource ID #0x0
W/ResourceType( 1329): No package identifier when getting value for resource number 0x00000000
W/PackageManager( 1329): Failure retrieving resources for com.android.providers.downloads: Resource ID #0x0
W/ResourceType( 1329): No package identifier when getting value for resource number 0x00000000
W/PackageManager( 1329): Failure retrieving resources for com.android.providers.downloads: Resource ID #0x0
D/ResourcesManager( 1329): creating new AssetManager and set to /data/app/com.slightlyrobot.motion_record_phone_and_wear-2/base.apk
I/WearablePkgInstaller( 1329): Setting DataItem to install wearable apps for com.slightlyrobot.motion_record_phone_and_wear

还有很多行 W/StreamManager( 1329): Dropping non-bitmap icon from notification. 在输出中间隔。为清楚起见,我已删除它们。

注意事项

  1. 我正在使用命令行 SDK 工具集,并已按照 Android developer's webpage 上的“手动打包”说明对应用程序进行签名和“签署您的申请”。
  2. 我目前正在使用 Android SDK 命令行工具包,但如果需要,我愿意使用 Android Studio。
  3. 硬件:我正在三星 Galaxy S5 和华硕 ZenWatch 2 上进行测试。
  4. 我将 wear apk 从“wear-release-unsigned.apk”重命名为“wear_release_unsigned.apk”,并将其放入移动应用程序的 /res/raw/ 目录中。与名字相反,它实际上是签名的。
  5. Original source code在 github 上可用。

非常感谢大家。

更新

我已经修改了手机和穿戴应用程序的版本。日志如下。和上次一样,这些都是 1329 的 grep。我还删除了“删除非位图”行。

D/ResourcesManager( 1329): creating new AssetManager and set to /system/priv-app/SecDownloadProvider/SecDownloadProvider.apk
W/ResourcesManager( 1329): Asset path '/system/framework/secsmartcard.jar' does not exist or contains no resources.
I/art     ( 1329): Explicit concurrent mark sweep GC freed 45349(2MB) AllocSpace objects, 3(304KB) LOS objects, 39% free, 18MB/31MB, paused 869us total 143.177ms
D/ResourcesManager( 1329): creating new AssetManager and set to /system/framework/framework-res.apk
W/asset   ( 1329): Asset path /system/framework/com.ipsec.client.jar is neither a directory nor file (type=1).
W/ResourcesManager( 1329): Asset path '/system/framework/com.ipsec.client.jar' does not exist or contains no resources.
D/ResourcesManager( 1329): creating new AssetManager and set to /system/priv-app/SecDownloadProvider/SecDownloadProvider.apk
W/ResourcesManager( 1329): Asset path '/system/framework/secsmartcard.jar' does not exist or contains no resources.
W/ResourceType( 1329): No package identifier when getting value for resource number 0x00000000
W/PackageManager( 1329): Failure retrieving resources for com.android.providers.downloads: Resource ID #0x0

最佳答案

好吧,我解决了我自己的问题。根据 Android 开发者网页,“阅读并理解签署您的应用程序很重要”。然后他们链接到我没有完全阅读的页面。

通过向我的 build.gradle 文件添加适当的配置而不是使用 jarsigner 手动签名,一切都安装得很好。

https://developer.android.com/tools/publishing/app-signing.html

关于android - 如何自动将APK从手机推送到Wear?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35350002/

相关文章:

java.lang.StackOverflowError?

cordova - 无法将 Phonegap Build APK 上传到 play.google - 您上传了一个可调试的 APK 错误

android - 在 Android 中禁用和启用 Google Play 系统应用程序或第 3 方应用程序

android - 具有配置的资源 attr/textSize 的重复值

Wear 设备上的 Android 通知。 `localOnly` 标志

gradle - 从APK移除资源文件

android - 如何在CmakeList中添加目标链接库.so和.a文件?

android - 2021 年在 Android 中加密字符串的最佳和最安全的方法是什么?

android - 空推广告错误

android - 向客户发送自定义 Android 应用程序