page.title=Packaging Wearable Apps page.tags=wear helpoutsWidget=true @jd:body
When publishing to users, you must package a wearable app inside of a handheld app, because users cannot browse and install apps directly on the wearable. If packaged properly, when users download the handheld app, the system automatically pushes the wearable app to the paired wearable.
Note: This feature doesn't work when you are signing your apps with
a debug key when developing. While developing, installing apps with adb install
or
Android Studio directly to the wearable is required.
To properly package a wearable app in Android Studio:
build.gradle
file
that points to the wearable app module:
dependencies { compile 'com.google.android.gms:play-services:5.0.+@aar' compile 'com.android.support:support-v4:20.0.+'' wearApp project(':wearable') }
Alternatively, you can sign both apps from the command line using the Gradle wrapper. Both apps must be signed to have the automatic pushing of the wearable app work.
Store your key file location and credentials in environment variables and run the Gradle wrapper as follows:
./gradlew assembleRelease \ -Pandroid.injected.signing.store.file=$KEYFILE \ -Pandroid.injected.signing.store.password=$STORE_PASSWORD \ -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ -Pandroid.injected.signing.key.password=$KEY_PASSWORD
If your build process requires signing the wearable app separately from the handheld app,
you can declare the following Gradle rule in the handheld module's build.gradle
to
embed the previously-signed wearable app:
dependencies { ... wearApp files('/path/to/wearable_app.apk') }
You then sign your handheld app in any manner you wish (either with the Android Studio
Build > Generate Signed APK... menu item or with Gradle signingConfig
rules as
described in the previous section.
It's still possible to package the wearable app into the handheld app manually if you are using another IDE or another method of building.
res/raw
directory. We'll
refer to the APK as wearable_app.apk
.res/xml/wearable_app_desc.xml
file that contains the version and
path information of the wearable app. For example:
<wearableApp package="wearable.app.package.name"> <versionCode>1</versionCode> <versionName>1.0</versionName> <rawPathResId>wearable_app</rawPathResId> </wearableApp>
The package
, versionCode
, and versionName
are the
same values specified in the wearable app's AndroidManifest.xml
file.
The rawPathResId
is the static variable name of the APK resource. For example,
for wearable_app.apk
, the static variable name is wearable_app
.
meta-data
tag to your handheld app's <application>
tag to
reference the wearable_app_desc.xml
file.
<meta-data android:name="com.google.android.wearable.beta.app" android:resource="@xml/wearable_app_desc"/>
Many build tools automatically compress any files added to the res/raw
directory of an Android app. Because the wearable APK is already zipped, these tools re-compress the
wearable APK and the wearable app installer can no longer read the wearable app.
When this happens, the installation fails. On the handheld app, the PackageUpdateService
logs the following error: "this file cannot be opened as a file descriptor; it is probably compressed."
Android Studio doesn't compress your APK by default, but if you are using another build process, ensure that you don't doubly compress the wearable app.