Search code examples
javaandroidapkwear-osandroid-wear-2.0

Android Wear Packaging - Install Failing


This issue just started happening recently, after upgrading the watch.

The mobile phone is running Android 7.0
Smartwatch is running Wear OS: 1.1 / Android OS: 8.0.0

Mobile / WearOS app are configured to use (graddle)
minSdk: 23
targetSdk: 26

jarsigner / zipalign - WearApp: OK
jarsigner / zipalign - MobileApp: OK
adb install on mobile: OK

SmartWatch notifies of the companion app: OK
Push "Install App" on SmartWatch: Fails (this is new)

Please see the logs below:

05-16 22:36:48.438   556   556 I EmbeddedAppsService: Download complete for com.wavestracker.app
05-16 22:36:48.439  1046  1058 I Finsky  : [95] com.google.android.finsky.wear.receivers.d.a(2): Embedded download completed for com.wavestracker.app
05-16 22:36:48.460   556   556 I EmbeddedAppsService: Start installing com.wavestracker.app
05-16 22:36:48.462   556   556 I PkgMgrPvtUtil: Sending install intent to PackageInstaller Intent { act=android.intent.action.INSTALL_PACKAGE dat=package://com.wavestracker.app cmp=com.google.android.packageinstaller/com.android.packageinstaller.wear.WearPackageInstallerService (has extras) } forcom.wavestracker.app
05-16 22:36:48.681   556   625 D StreamDBQueue: Promised revision #10081 to queue a new op
05-16 22:36:48.682   556   625 D BaseStreamManager: Promised set @ r#10081 for (android,tag=null,id=40,notifKey=0|android|40|null|1000)
05-16 22:36:48.682   556  1973 D StreamDatabase:   filtering notification, reason=FRAMEWORKS_FOREGROUND_NOTIFICATION, itemId=StreamItemIdAndRevision{notifKey=0|android|40|null|1000, packageName=android, id=40, revision=10081, originalRevision=10081, updateCount=0}
05-16 22:36:48.683   556  1973 D StreamAdapter: onStreamChange StreamChangeEvent[modified=1, removed=0, modifiedTop=0, removedTop=0, reorder=false, possibleAlertingItem=none]
05-16 22:36:48.683   556  1973 D StreamAdapter:   modified:
05-16 22:36:48.683   556  1973 D StreamAdapter:     StreamItemIdAndRevision{notifKey=0|android|40|null|1000, packageName=android, id=40, revision=10081, originalRevision=10081, updateCount=0}
05-16 22:36:48.712   556  1973 D NewStreamAdapter: Publishing revision #10081 to adapter clients
05-16 22:36:48.728   556   625 D StreamDBQueue: Promised revision #10082 to queue a new op
05-16 22:36:48.728   556   625 D BaseStreamManager: Promised set @ r#10082 for (com.google.android.packageinstaller,tag=null,id=1,notifKey=0|com.google.android.packageinstaller|1|null|10024)
05-16 22:36:48.729   556  1973 D DynamicBucketRankerImpl: StreamItemIdAndRevision{notifKey=0|com.google.android.packageinstaller|1|null|10024, packageName=com.google.android.packageinstaller, id=1, revision=10082, originalRevision=10082, updateCount=0} in bucket #3 (Ongoing)
05-16 22:36:48.730   556  1973 D WatchStreamDB: com.google.android.clockwork.common.stream.TopLevelStreamItem@9bfb986 ranked at index 0
05-16 22:36:48.730   556  1973 D StreamAdapter: onStreamChange StreamChangeEvent[modified=1, removed=0, modifiedTop=1, removedTop=0, reorder=true, possibleAlertingItem=none]
05-16 22:36:48.730   556  1973 D StreamAdapter:   modified:
05-16 22:36:48.730   556  1973 D StreamAdapter:     StreamItemIdAndRevision{notifKey=0|com.google.android.packageinstaller|1|null|10024, packageName=com.google.android.packageinstaller, id=1, revision=10082, originalRevision=10082, updateCount=0}
05-16 22:36:48.730   556  1973 D StreamAdapter:   modifiedTopLevel:
05-16 22:36:48.730   556  1973 D StreamAdapter:     StreamItemIdAndRevision{notifKey=0|com.google.android.packageinstaller|1|null|10024, packageName=com.google.android.packageinstaller, id=1, revision=10082, originalRevision=10082, updateCount=0}
05-16 22:36:48.744   556  1973 D NewStreamAdapter: Publishing revision #10082 to adapter clients
05-16 22:36:48.761   556   556 D StreamScroll: onItemsRemoved positionStart:0 itemCount:1
05-16 22:36:48.762   556   556 D StreamPreviewer: top stream item removed, isInteractive=true isInHomePosition=true shouldScrollToTop=false
05-16 22:36:48.762   556   556 D StreamScroll: onItemsAdded positionStart:0 itemCount:1
05-16 22:36:48.762   556   556 D StreamPreviewer: TOP_CHANGED: considering preview/peek; metadata for top item: metadata[mayHideyPeek=true mWasPushedDown=false mPreviewed=false, mAlerting=false, mShouldAlwaysHideyPeek=false, mOngoing=true]
05-16 22:36:48.762   556   556 D StreamPreviewLogic: item:metadata[mayHideyPeek=true mWasPushedDown=false mPreviewed=false, mAlerting=false, mShouldAlwaysHideyPeek=false, mOngoing=true] ambient:no paused:yes action:NONE
05-16 22:36:48.762   556   556 D StreamPreviewer: TOP_CHANGED:should not preview and in home position, nothing to do
05-16 22:36:49.083   272   281 I zygote  : Background concurrent copying GC freed 17533(1223KB) AllocSpace objects, 16(360KB) LOS objects, 19% free, 8MB/10MB, paused 7.304ms total 456.694ms
05-16 22:36:49.116  1228  2330 W ziparchive: Zip: missed a central dir sig (at 0)
05-16 22:36:49.116  1228  2330 W zipro   : Error opening archive /data/user_de/0/com.google.android.packageinstaller/files/tmp/com.wavestracker.app.apk: Iteration ended
05-16 22:36:49.116  1228  2330 D asset   : failed to open Zip archive '/data/user_de/0/com.google.android.packageinstaller/files/tmp/com.wavestracker.app.apk'
05-16 22:36:49.118  1228  2330 W PackageParser: Failed to parse /data/user_de/0/com.google.android.packageinstaller/files/tmp/com.wavestracker.app.apk
05-16 22:36:49.118  1228  2330 W PackageParser: java.io.FileNotFoundException: AndroidManifest.xml
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.content.res.AssetManager.openXmlAssetNative(Native Method)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:546)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:514)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.content.pm.PackageParser.parseApkLite(PackageParser.java:1667)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.content.pm.PackageParser.parseMonolithicPackageLite(PackageParser.java:848)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.content.pm.PackageParser.parseMonolithicPackage(PackageParser.java:1203)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.content.pm.PackageParser.parsePackage(PackageParser.java:969)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.content.pm.PackageParser.parsePackage(PackageParser.java:981)
05-16 22:36:49.118  1228  2330 W PackageParser:     at com.android.packageinstaller.PackageUtil.getPackageInfo(PackageUtil.java:60)
05-16 22:36:49.118  1228  2330 W PackageParser:     at com.android.packageinstaller.wear.WearPackageInstallerService.installPackage(WearPackageInstallerService.java:247)
05-16 22:36:49.118  1228  2330 W PackageParser:     at com.android.packageinstaller.wear.WearPackageInstallerService.-wrap1(Unknown Source:0)
05-16 22:36:49.118  1228  2330 W PackageParser:     at com.android.packageinstaller.wear.WearPackageInstallerService$ServiceHandler.handleMessage(WearPackageInstallerService.java:101)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.os.Handler.dispatchMessage(Handler.java:105)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.os.Looper.loop(Looper.java:164)
05-16 22:36:49.118  1228  2330 W PackageParser:     at android.os.HandlerThread.run(HandlerThread.java:65)
05-16 22:36:49.119  1228  2330 E WearPkgInstallerService: Could not parse apk information for com.wavestracker.app
05-16 22:36:49.140   556   625 D StreamDBQueue: Promised revision #10083 to queue a new op
05-16 22:36:49.140   556   625 D BaseStreamManager: Promised remove @ r#10083 for StreamItemIdAndRevision{notifKey=0|com.google.android.packageinstaller|1|null|10024, packageName=com.google.android.packageinstaller, id=1, revision=0, originalRevision=0, updateCount=0} (@10082): SBN removed: StreamItemIdAndRevision{notifKey=0|com.google.android.packageinstaller|1|null|10024, packageName=com.google.android.packageinstaller, id=1, revision=0, originalRevision=0, updateCount=0}

Fun fact: the "debug" app works just fine, the "release" (signed) version does not; obviously Google does not allow me to go live with a "debug" app / apk.

Please note that this is not the first or second release of the app; so I must insist that the whole jarsigner, zipalign, res/xml, res/raw procedure has been rehearsed a couple of times.


Solution

  • I finally got it to work on my phone and watch.

    Here's what I had to do:
    1) Uninstalled app from the Mobile Phone.
    2) Restarted both devices (Phone / Watch).
    3) Cleaned / Built / Signed / ZipAligned WearApp
    4) Cleaned / Built / Signed / ZipAligned MobileApp
    5) Turned Off Wi-Fi / Wireless on Watch
    6) Installed app on the mobile phone.
    7) The notification popped up on Watch, Install OK.

    I am not convinced yet that all is fine though.
    More than happy to leave these notes here if this helps someone else.

    PS: I will carry on my investigations and try to break things again :)