Упаковка портативного и переносимого Android-приложения вместе с CLI [NativeScript]
Я пытаюсь создать приложение Phone + Wear с NativeScript для Android. Мне удалось создать как отдельно, так и запустить их на эмуляторе Android. Проблема в том, что я не могу их правильно упаковать, я имею в виду, что я не могу упаковать их вместе, чтобы установить только один APK, который установит карманное приложение в телефоне и наденет загружаемое приложение в часы.
Метод и код
Даже сообщение, которое вы написали об Android Wear, довольно устарело, и образ репо кода образца отсутствует, я смог создать приложение NativeScript который APK работает правильно в эмуляторе Android Wear.
У меня также есть обычное телефонное приложение, построенное с помощью NativeScript, которое работает правильно в эмуляторе и на моем собственном устройстве (описано ниже).
Я попытался упаковать приложение в соответствии с шагами, описанными в официальной документации в разделах: "Подписывание портативного и портативного приложения отдельно" и "Пакет вручную". Я пробовал оба метода упаковки, но никто не работает для меня (последний из них также описан в этот пост).
Ниже вы можете видеть файлы AndroidManifest.xml
и app.gradle
обоих приложений и команды, которые я выполняю для упаковки подписанного приложения:
Wearable App Files
bilbonbizi/носимых/package.json
"nativescript": {
"id": "com.berriart.bilbonbizi",
"tns-android": {
"version": "2.5.0"
}
},
bilbonbizi/носимых/приложение/App_Resources/Android/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="__PACKAGE__"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"/>
<uses-sdk
android:minSdkVersion="20"
android:targetSdkVersion="__APILEVEL__"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-feature android:name="android.hardware.location.gps" />
<uses-feature android:name="android.hardware.location.network" />
<uses-feature android:name="android.hardware.type.watch" />
<application
android:name="com.tns.NativeScriptApplication"
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@android:style/Theme.DeviceDefault">
<activity
android:name="com.tns.NativeScriptActivity"
android:label="@string/title_activity_kimera"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/LaunchScreenTheme">
<meta-data android:name="SET_THEME_ON_LAUNCH" android:resource="@style/AppTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.tns.ErrorReportActivity"/>
</application>
</manifest>
bilbonbizi/носимых/приложение/App_Resources/Android/app.gradle
dependencies {
compile 'com.google.android.support:wearable:+'
}
android {
defaultConfig {
generatedDensities = []
applicationId = "com.berriart.bilbonbizi"
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
Обработанные файлы приложений
bilbonbizi/носимых/package.json
"nativescript": {
"id": "com.berriart.bilbonbizi",
"tns-android": {
"version": "2.5.0"
}
},
bilbonbizi/портативный/приложение/App_Resources/Android/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="__PACKAGE__"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"/>
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="__APILEVEL__"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-feature android:name="android.hardware.location.gps" />
<uses-feature android:name="android.hardware.location.network" />
<uses-feature android:name="android.hardware.type.watch" />
<application
android:name="com.tns.NativeScriptApplication"
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<meta-data android:name="com.google.android.wearable.beta.app"
android:resource="@xml/wearable_app_desc"/>
<activity
android:name="com.tns.NativeScriptActivity"
android:label="@string/title_activity_kimera"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:theme="@style/LaunchScreenTheme">
<meta-data android:name="SET_THEME_ON_LAUNCH" android:resource="@style/AppTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.tns.ErrorReportActivity"/>
<service android:name="com.mapbox.mapboxsdk.telemetry.TelemetryService" />
</application>
</manifest>
bilbonbizi/портативный/приложение/App_Resources/Android/app.gradle
android {
defaultConfig {
generatedDensities = []
applicationId = "com.berriart.bilbonbizi"
}
aaptOptions {
additionalParameters "--no-version-vectors"
noCompress "apk"
}
}
bilbonbizi/портативный/приложение/App_Resources/Android/XML/wearable_app_desc.xml
<wearableApp package="com.berriart.bilbonbizi">
<versionCode>1</versionCode>
<versionName>1.0</versionName>
<rawPathResId>wearable_app</rawPathResId>
</wearableApp>
Шаги по установке приложения (шаги по воспроизведению проблемы)
Используемый ключ подписи одинаковый для обоих:
cd bilbonbizi/wearable
tns platform remove android && tns platform add android && tns prepare android
tns build android --release --key-store-path [hiddenpath] --key-store-password [hiddenpass] --key-store-alias [hiddenalias] --key-store-alias-password [hiddenpass] --copy-to ../handheld/app/App_Resources/Android/raw/wearable_app.apk
cd ../handheld
tns platform remove android && tns platform add android && tns prepare android
tns build android --release --key-store-path [hiddenpath] --key-store-password [hiddenpass] --key-store-alias [hiddenalias] --key-store-alias-password [hiddenpass] --copy-to ../bilbonbizi.apk
cd ..
adb install ./bilbonbizi.apk
После этого приложение будет правильно установлено в телефоне, но не будет нажато на часы.
Журналы вывода
adb logcat
02-07 20:39:24.600 28861 7360 I ActivityUpsampling: AR upsampling state transition NORMAL_STATE --> NORMAL_STATE, activity: unknown
02-07 20:39:24.625 28861 7360 I Fit:LocationProvider: Location recording changed to : STOP_HIGH_FIDELITY_RECORDING.
02-07 20:39:25.962 3553 3553 D powerUI : accValue============37
02-07 20:39:25.962 3553 3553 D powerUI : mCputempVlaue============37
02-07 20:39:27.965 3553 3553 D powerUI : accValue============41
02-07 20:39:27.965 3553 3553 D powerUI : mCputempVlaue============41
02-07 20:39:28.825 5372 5527 D ClClient: Not sending keepalive. Current connection state=STOPPED
02-07 20:39:29.968 3553 3553 D powerUI : accValue============42
02-07 20:39:29.968 3553 3553 D powerUI : mCputempVlaue============42
02-07 20:39:30.506 7351 7351 I dex2oat : dex2oat took 8.052s (threads: 4) arena alloc=3MB java alloc=5MB native alloc=25MB free=3MB
02-07 20:39:30.964 997 1050 V BackupManagerService: restoreAtInstall pkg=com.berriart.bilbonbizi token=18 restoreSet=35825bc48d1581dc
02-07 20:39:30.966 997 3469 D BackupManagerService: MSG_RUN_RESTORE observer=null
02-07 20:39:30.975 4181 27142 I Backup : [GmsBackupTransport] New restore session, 2 apps
02-07 20:39:31.127 4181 27142 W Conscrypt: Could not set socket write timeout: null
02-07 20:39:31.198 4181 27142 W Conscrypt: Could not set socket write timeout: null
02-07 20:39:31.399 4181 27142 I GmsBackupTransport: Http Response Code : 200
02-07 20:39:31.411 4181 11827 I Backup : [GmsBackupTransport] Current restore package : PackageInfo{ebff3de @[email protected]}
02-07 20:39:31.411 4181 11827 I Backup : [GmsBackupTransport] A key/value pairs restore
02-07 20:39:31.412 997 3469 D BackupManagerService: initiateOneRestore [email protected]@
02-07 20:39:31.446 997 3469 V BackupManagerService: No more packages; finishing restore
02-07 20:39:31.450 4181 6449 I Backup : [GmsBackupTransport] restore finished
02-07 20:39:31.453 997 3469 I BackupRestoreController: restoreFinished for 0
02-07 20:39:31.453 997 3469 I BackupManagerService: Restore complete.
02-07 20:39:31.455 997 1050 W Settings: Setting install_non_market_apps has moved from android.provider.Settings.Global to android.provider.Settings.Secure, returning read-only value.
02-07 20:39:31.456 997 1050 I art : Starting a blocking GC Explicit
02-07 20:39:31.687 997 1050 I art : Explicit concurrent mark sweep GC freed 192257(10MB) AllocSpace objects, 10(2MB) LOS objects, 33% free, 25MB/37MB, paused 2.673ms total 231.207ms
02-07 20:39:31.696 4764 4764 D BluetoothMapAppObserver: onReceive
02-07 20:39:31.696 4764 4764 D BluetoothMapAppObserver: The installed package is: com.berriart.bilbonbizi
02-07 20:39:31.700 4764 4764 D BluetoothMapAppObserver: Found 0 application(s) with intent android.bluetooth.action.BLUETOOTH_MAP_PROVIDER
02-07 20:39:31.703 4764 4764 D BluetoothMapAppObserver: Found 0 application(s) with intent android.bluetooth.action.BLUETOOTH_MAP_IM_PROVIDER
02-07 20:39:31.706 7337 7337 I art : System.exit called, status: 0
02-07 20:39:31.706 7337 7337 I AndroidRuntime: VM exiting with result code 0.
02-07 20:39:31.719 997 7064 W ActivityManager: Permission Denial: Accessing service ComponentInfo{com.google.android.music/com.google.android.music.dial.DialMediaRouteProviderService} from pid=6893, uid=1008$
that is not exported from uid 10065
02-07 20:39:31.722 7208 7364 D Documents: Update found 8 roots in 14ms
02-07 20:39:31.730 997 4095 W ActivityManager: Permission Denial: Accessing service ComponentInfo{com.google.android.music/com.google.android.music.dial.DialMediaRouteProviderService} from pid=12711, uid=1002
7 that is not exported from uid 10065
02-07 20:39:31.730 997 3363 I InputReader: Reconfiguring input devices. changes=0x00000010
02-07 20:39:31.802 7117 7117 W ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1221 android.content.ContextWrapper.startService:581 android.co
ntent.ContextWrapper.startService:581 com.bq.gallerybq.app.PackagesMonitor.onReceive:40 android.app.ActivityThread.handleReceiver:2725
02-07 20:39:31.823 4108 4108 D CarrierServiceBindHelper: Receive action: android.intent.action.PACKAGE_ADDED
02-07 20:39:31.824 4108 4108 D CarrierServiceBindHelper: mHandler: 3
02-07 20:39:31.824 4108 4108 D CarrierConfigLoader: mHandler: 9 phoneId: 0
02-07 20:39:31.838 997 7064 I ActivityManager: Start proc 7371:com.google.android.partnersetup/u0a12 for broadcast com.google.android.partnersetup/.RlzPingBroadcastReceiver
02-07 20:39:31.891 7371 7371 W System : ClassLoader referenced unknown path: /system/priv-app/GooglePartnerSetup/lib/arm
02-07 20:39:31.970 3553 3553 D powerUI : accValue============39
02-07 20:39:31.970 3553 3553 D powerUI : mCputempVlaue============39
02-07 20:39:31.980 9247 9247 I Finsky : [1] com.google.android.finsky.wear.WearSupportService.a(307): Wear auto install disabled for package com.berriart.bilbonbizi
02-07 20:39:31.992 997 3623 I ActivityManager: Killing 6845:com.pushbullet.android/u0a118 (adj 15): empty #17
02-07 20:39:32.072 997 7067 D ActivityManager: cleanUpApplicationRecord -- 6845
02-07 20:39:32.116 9247 9247 I Finsky : [1] com.google.android.finsky.utils.PermissionPolicies$PermissionPolicyService.onStartCommand(115): post-install permissions check for com.berriart.bilbonbizi
02-07 20:39:32.117 3947 7369 I WearablePkgInstaller: Setting DataItem to install wearable apps for com.berriart.bilbonbizi
02-07 20:39:32.155 9247 9247 I Finsky : [1] com.google.android.finsky.utils.bd.run(2300): Package state data is missing for com.berriart.bilbonbizi
02-07 20:39:32.303 5372 5372 V ApplicationReceiver:onReceive: 2017-02-07 19:39:32-03f1a6a6-fd89-4d04-98ad-0967d0ad6a4f-Application install message is received ver:1.2.2
02-07 20:39:32.304 5372 5372 V ApplicationReceiver:onReceive: 2017-02-07 19:39:32-03f1a6a6-fd89-4d04-98ad-0967d0ad6a4f-ApplicationReceiver detectes the installation of package:com.berriart.bilbonbizi ver:1.2.2
02-07 20:39:32.351 6446 7009 I Icing : Usage reports 0 indexed 0 rejected 0 imm upload false
02-07 20:39:32.361 487 487 I MSM-irqbalance: Decided to move IRQ177 from CPU4 to CPU6
02-07 20:39:32.367 6446 7009 I Icing : Usage reports 0 indexed 0 rejected 0 imm upload false
02-07 20:39:32.375 6446 7401 W IcingInternalCorpora: getNumBytesRead when not calculated.
02-07 20:39:32.503 9247 9247 I Finsky : [1] com.google.android.finsky.wear.bc.onPostExecute(2601): Writing installed apps for account [9oegQYjV2A_lG13uYgoCCNs4Sr8]
02-07 20:39:32.714 4764 5061 D bt_btm_pm: btm_pm_snd_md_req switching from SNIFF to ACTIVE.
02-07 20:39:32.747 3947 4409 V WearableLS: bindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:32.749 3947 4409 V WearableLS: unbindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:32.795 3947 4409 V WearableLS: bindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:32.798 3947 4409 V WearableLS: unbindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:32.994 4764 5061 D bt_btm_pm: btm_pm_proc_mode_change switched from UNKNOWN to ACTIVE.
02-07 20:39:33.106 3947 7369 I WearablePkgInstaller: Setting DataItem to install wearable apps for com.berriart.bilbonbizi
02-07 20:39:33.148 3947 4409 V WearableLS: bindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:33.151 3947 4409 V WearableLS: unbindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:33.200 3947 4409 V WearableLS: bindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:33.203 3947 4409 V WearableLS: unbindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:33.270 9247 9639 I PlayCommon: [1735] com.google.android.play.a.g.e(909): Preparing logs for uploading
02-07 20:39:33.270 9247 9639 I PlayCommon: [1735] com.google.android.play.a.g.e(911): No file ready to send
02-07 20:39:33.372 6446 6714 I Icing : Indexing FDFCB9FA2CA9FD93DE9DD0B9F5797CCEABC83AD6 from com.google.android.gms
02-07 20:39:33.449 3947 4409 V WearableLS: bindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:33.451 3947 4409 V WearableLS: unbindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:33.509 6446 6714 I Icing : Indexing done FDFCB9FA2CA9FD93DE9DD0B9F5797CCEABC83AD6
02-07 20:39:33.974 3553 3553 D powerUI : accValue============36
02-07 20:39:33.974 3553 3553 D powerUI : mCputempVlaue============36
02-07 20:39:35.978 3553 3553 D powerUI : accValue============35
02-07 20:39:35.978 3553 3553 D powerUI : mCputempVlaue============35
02-07 20:39:37.360 487 487 I MSM-irqbalance: Decided to move IRQ130 from CPU4 to CPU6
02-07 20:39:37.982 3553 3553 D powerUI : accValue============35
02-07 20:39:37.982 3553 3553 D powerUI : mCputempVlaue============35
02-07 20:39:38.455 3947 4409 V WearableLS: bindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
02-07 20:39:38.457 3947 4409 V WearableLS: unbindService: com.google.android.wearable.app/com.google.android.clockwork.companion.DispatchingWearableListenerService
Я вложил длинный журнал, чтобы предоставить как можно больше информации, но, вероятно, наиболее подходящими журналами являются: (выбрано сверху)
BluetoothMapAppObserver: The installed package is: com.berriart.bilbonbizi
CarrierServiceBindHelper: Receive action: android.intent.action.PACKAGE_ADDED
Finsky : [1] com.google.android.finsky.wear.WearSupportService.a(307): Wear auto install disabled for package com.berriart.bilbonbizi
Finsky : [1] com.google.android.finsky.utils.PermissionPolicies$PermissionPolicyService.onStartCommand(115): post-install permissions check for com.berriart.bilbonbizi
WearablePkgInstaller: Setting DataItem to install wearable apps for com.berriart.bilbonbizi
Finsky : [1] com.google.android.finsky.utils.bd.run(2300): Package state data is missing for com.berriart.bilbonbizi
ApplicationReceiver:onReceive: 2017-02-07 19:39:32-03f1a6a6-fd89-4d04-98ad-0967d0ad6a4f-Application install message is received ver:1.2.2
ApplicationReceiver:onReceive: 2017-02-07 19:39:32-03f1a6a6-fd89-4d04-98ad-0967d0ad6a4f-ApplicationReceiver detectes the installation of package:com.berriart.bilbonbizi ver:1.2.$
WearablePkgInstaller: Setting DataItem to install wearable apps for com.berriart.bilbonbizi
Мне чрезвычайно сложно найти информацию и понять следующую строку журнала:
Отключить автоматическую установку для пакета com.berriart.bilbonbizi
И также действительно странно находить следующую строку, учитывая, что я не изменял номер версии, а тот, который написан в манифесте, равен 1.0:
установка пакета: com.berriart.bilbonbizi ver: 1.2. $
Информация об устройствах
PC
tns --version
# 2.5.0
cat /etc/lsb-release
# DISTRIB_ID=Ubuntu
# DISTRIB_RELEASE=16.10
# DISTRIB_CODENAME=yakkety
# DISTRIB_DESCRIPTION="Ubuntu 16.10"
- tns-core-modules: "2.5.0"
- tns-android: "2.5.0"
Телефон
BQ Aquaris M5 (Android 6.0.1)
SmartWatch
Sony Smartwatch 3 (номер компиляции M1D64T)
Вопрос
Как я уже сказал, когда окончательный APK построен и установлен на телефоне, загружаемое приложение не нажимается на подключенные часы. Что-то не так в коде/шагах, описанных выше?
Сообщите мне, могу ли я помочь вам, предоставив дополнительную информацию.
Ответы
Ответ 1
может быть полезно увидеть файлы build.gradle ваших модулей (как телефонных, так и доступных).
Кроме того, вы не указали, хотите ли вы создать приложение Android Wear для Android Wear 2.0. Я полагаю, вам нужно только приложение Android Wear 1.x weareable, так как это единственное, которое можно установить автоматически по воздуху при установке приложения на телефоне.
Чтобы он работал правильно, ваш файл build.gradle модуля телефонной трубки должен содержать эти зависимости:
dependencies {
...
compile 'com.google.android.gms:play-services-wearable:10.0.1'
compile 'com.android.support:support-compat:25.1.0'
wearApp project(':wearable')
...
}
Выполняя это, вы обычно должны просто создавать и подписывать трубку apk