當發布給用戶時,你必須在手持應用中打包可穿戴應用程序,因為用戶不能在穿戴式設備中直接搜索安裝應用.如果打包正確,當用戶在手持設備中下載應用之后系統會自動的發送穿戴式應用到配對的設備中.
注意:在開發的時候如果用debug key打包的應用沒有這個功能.在開發的時候需要使用
adb install
或者Android Studio
直接安裝到穿戴式設備中.
使用Android Studio打包
1.在手持應用清單文件中包括所有的穿戴式應用的權限.舉個例子,如果你的穿戴式應用需要VIBRATE
這個權限,你同樣需要將這個權限添加到手持設備應用的清單文件中.
2.手持設備應用和穿戴式設備應用是相同的包名和版本號.
3.在手持設備應用的build.gradle
文件中聲明指向穿戴式設備應用
dependencies {
compile 'com.google.android.gms:play-services:5.0.+@aar'
compile 'com.android.support:support-v4:20.0.+''
wearApp project(':wearable')
}
4.點擊 Build>Generate Signed APK...按照屏幕的說明指定keystore并為app簽名.Android Studio將攜帶有穿戴式應用的手持設備應用導出到工程的根目錄.
或者你也可以在命令行里使用Gradle wrapper為應用簽名.這兩個應用必須都得簽名才能自動發送到穿戴式設備中工作.
像下面這樣在環境變量中配置key
和credentials
并運行Gradle wrapper
.
./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
分別為可穿戴式應用和手持設備應用簽名
如果在構建過程中需要在手持設備應用為穿戴式應用簽名,你可以在手持設備工程的build.gradle
中聲明如下Gradle
規則.
dependencies {
...
wearApp files('/path/to/wearable_app.apk')
}
手動打包
如果你使用其他的開發工具或者構建方法有可能需要手動打包應用.
1.在手持應用清單文件中包括所有的穿戴式應用的權限.舉個例子,如果你的穿戴式應用需要VIBRATE
這個權限,你同樣需要將這個權限添加到手持設備應用的清單文件中.
2.手持設備應用和穿戴式設備應用是相同的包名和版本號.
3.拷貝已經簽名的穿戴式應用到手持設備工程下的res/raw
目錄,我們將會引用這個應用最后生成wearable_app.apk
4.在res/xml下創建wearable_app_desc.xml
文件,該文件包括穿戴式應用的版本路徑等信息.
<wearableApp package="wearable.app.package.name">
<versionCode>1</versionCode>
<versionName>1.0</versionName>
<rawPathResId>wearable_app</rawPathResId>
</wearableApp>
文件中的包名,版本號,版本名和穿戴式應用中的清單文件中的相同.rawPathResId
是應用的名字.舉個例子wearable_app.apk
這個應用的靜態變量名就是wearable_app
.
5.在手持應用項目的<application>
標簽下添加meta-data
標簽.
<meta-data android:name="com.google.android.wearable.beta.app"
android:resource="@xml/wearable_app_desc"/>
6.構建簽名手持設備應用.
關閉資源壓縮
許多構建工具在生成android 應用的時候會自動壓縮res/raw
目錄下的文件.因為穿戴式設備應用已經壓縮過了,這些工具會重復壓縮穿戴式設備應用導致穿戴式設備安裝器不能讀取穿戴式設備應用.
當這個發生的時候會安裝失敗.會出現這個錯誤日志:"this file cannot be opened as a file descriptor; it is probably compressed.".
Android Studio 默認不會進行這項壓縮,但是如果你使用其他的構建工具需要確保沒有進行兩次壓縮.