【发布时间】:2016-02-11 21:05:18
【问题描述】:
这是我在 Stack Overflow 上的第一个问题,所以请告诉我是否应该采用不同的格式。
我正在编写一个 Android 移动(电话)应用程序,它将与配套的 Android Wear(手表)应用程序进行交互。当我通过 adb 直接安装这两个应用程序时,它们都可以工作。我正在尝试创建一个 APK,它将通过电子邮件附件安装到手机上,并将配套应用程序自动推送到我的手表上。但是,当我创建一个 APK 并通过电子邮件附件安装它时,此 APK 无法成功将配套应用推送到我的手表。
当我通过$ 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. 在输出中间隔。为了清楚起见,我已将其删除。
备注
- 我正在使用命令行 SDK 工具集,并已按照 Android developer's webpage 和“签署您的应用程序”上的“手动打包”说明签署了应用程序。
- 我目前正在使用 Android SDK 命令行工具包,但如有必要,我愿意使用 Android Studio。
- 硬件:我正在三星 Galaxy S5 和华硕 ZenWatch 2 上进行测试。
- 我将wear apk 从“wear-release-unsigned.apk”重命名为“wear_release_unsigned.apk”,并将其放在移动应用程序的
/res/raw/目录中。与名称相反,它实际上是签名的。 - Original source code 在 github 上可用。
谢谢大家,非常感谢。
更新
我已经在手机和 Wear 应用上修改了版本。日志如下。和上次一样,这些是 1329 的 grep'ed。我还删除了“丢弃非位图”行。
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
【问题讨论】:
-
如果您的调试版本(您之前直接使用 adb 安装的)仍在您的手表上,请先将其删除。我在日志中根本没有看到名称“wear-release-unsigned”或“wear_release_unsigned”,但看到“com.slightlyrobot.motion_record_phone_and_wear”,是你的吗?另外,您能否打开您的 APK 并确保您的穿戴 apk 确实捆绑在其中?
-
我已经用 adb 删除了之前的调试版本。 “com.slightlyrobot.motion_record_phone_and_wear”是我用于穿戴和移动应用程序的包名称(你应该这样做吗?)。如何检查 APK 的内容?
-
是的,包名称应该完全匹配,并且两者都应该使用完全相同的密钥进行签名。 APK 基本上是一个 zip 文件,因此只需使用您拥有的实用程序将其解压缩即可。
-
我已经解压了 APK 并检查了,是的,APK 确实在里面。还有其他想法吗?
-
作为一个测试,你能不能把你的手机和穿戴应用程序的版本升级并在你的手机上安装新的apk并提供日志。
标签: android apk wear-os android-sdk-tools android-install-apk