Почему мое приложение SAP для Android удаляется после установки

Недавно я играл со своими умными часами Samsung Gear 2 (не S2) и создал для них новый циферблат. Я хотел бы показать на нем информацию о погоде, и я обнаружил, что для этой задачи мне нужно использовать Samsung Accessory Protocol (SAP).

Я следил за учебным пособием Samsung, чтобы создать демонстрационное приложение, чтобы узнать, как использовать SAP.

У меня возникла проблема с развертыванием приложения Tizen на моих часах, но я обнаружил, что самый низкий в настоящее время (2017 г.) доступный API — 2.3.1, тогда как Gear 2 Smartwatch имеет 2.2. После изменения в config.xml

<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.3.1"/>

to

<tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.2"/>

мое приложение было развернуто.

Я создал сертификат для создания подписанного пакета wgt.

Я также создал приложение поставщика Android в соответствии с руководством. Добавил новый сертификат и создал подписанный apk.

Я скопировал apk на телефон Samsung Galaxy S3 и попытался установить его. Установка завершилась без проблем. Однако через несколько секунд или при попытке инициализировать связь с часами я получаю информацию "Неизвестные источники" от Gear Manager, и мое приложение удаляется.

Я уже проверил «Разрешить неизвестные источники» в Android, Gear Manager и разрешил отладку по USB на умных часах (потому что это мой первый вопрос здесь, мне не разрешено публиковать более 2 ссылок, поэтому мне пришлось дать одна ссылка со всеми скриншотами, извините).

Почему мое приложение удаляется и что мне делать, чтобы оно работало корректно.

Приложение Tizen — потребительское

Сборка с использованием Tizen Studio 1.1.0.

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://yourdomain/SimpleSAPConsumer" version="1.0.0" viewmodes="maximized">
    <tizen:application id="XQKp7NYwyM.SimpleSAPConsumer" package="XQKp7NYwyM" required_version="2.2"/>
    <content src="index.html"/>
    <feature name="http://tizen.org/feature/screen.size.all"/>
    <icon src="icon.png"/>
    <tizen:metadata key="AccessoryServiceLocation" value="res/xml/accessoryservices.xml"/>
    <name>SimpleSAPConsumer</name>
    <tizen:privilege name="http://developer.samsung.com/privilege/accessoryprotocol"/>
    <tizen:profile name="wearable"/>
</widget>

аксессуарысервисы.xml

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <application name="HelloAccessoryConsumers">
    <serviceProfile role="consumer" name="sapsample" version="1.0" id="/sample/hello">
    <supportedTransports>
        <transport type="TRANSPORT_BT"/>
        <transport type="TRANSPORT_WIFI"/>
    </supportedTransports>
    <serviceChannel id="123" reliability="enable" priority="low" dataRate="low"> </serviceChannel>
    </serviceProfile>
    </application>
</resources>

Я могу предоставить остальную часть кода Tizen (main.js, index.html), если это необходимо. Прямо сейчас я не думаю, что это имеет какое-то значение для проблемы, с которой я сталкиваюсь.

Приложение для Android – поставщик

Сборка с использованием Android Studio 2.2.3. Структура:

app
->assets
-->SimpleSapConsumer.wgt
->libs
-->accessory-v2.5.0.jar
-->sdk-1.0.0.jar
->src
-->main
--->java
---->com.sap.baks.sapapp.service
----->SapServiceProvider.java
--->res
---->xml
----->sapservice.xml
---->AndroidManifest.xml

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sap.baks.sapapp">

    <uses-sdk
        android:minSdkVersion="18"
        android:targetSdkVersion="25" />

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK"/>
    <uses-permission android:name="com.samsung.wmanager.APP"/>
    <uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <service android:name=".service.SAPServiceProvider">
        </service>

        <receiver android:name="com.samsung.android.sdk.accessory.RegisterUponInstallReceiver" >
            <intent-filter>
                <action android:name="com.samsung.accessory.action.REGISTER_AGENT" />
            </intent-filter>
        </receiver>
        <receiver android:name="com.samsung.android.sdk.accessory.ServiceConnectionIndicationBroadcastReceiver" >
            <intent-filter>
                <action android:name="com.samsung.accessory.action.SERVICE_CONNECTION_REQUESTED" />
            </intent-filter>
        </receiver>

        <meta-data
            android:name="AccessoryServicesLocation"
            android:value="/res/xml/sapservices.xml" />
        <meta-data
            android:name="GearAppType"
            android:value="wgt" />
    </application>
</manifest>

sapservice.xml

<resources>
    <application name="SAPapp">
        <serviceProfile
            id="/system/sapsample"
            name="sapsample"
            role="provider"
            serviceImpl="com.sap.baks.sapapp.service.SAPServiceProvider"
            version="1.0"
            serviceLimit="ANY"
            serviceTimeout="10">
            <supportedTransports>
                <transport type="TRANSPORT_BT"/>
                <transport type="TRANSPORT_WIFI" />
            </supportedTransports>
            <serviceChannel
                id="123"
                dataRate="low"
                priority="low"
                reliability="enable"/>
        </serviceProfile>
    </application>
 </resources>

sapserviceprovider.java

Я собрал его вместе со скриншотами, потому что он довольно длинный.

******** РЕДАКТИРОВАТЬ **********

После попытки установить примеры приложений, как посоветовал @Iqbal, я получил следующие результаты:

Тизен

Я не мог установить приложение на свои часы, пока не изменил API на 2.2. Если бы API был больше, я увидел бы следующую ошибку:

[Initializing the launch environment...]
RDS: On
Target information: SM-R380
Application information: Id(VbsgE6bms2.HelloAccessoryConsumer), Package Name(VbsgE6bms2), Project Name(HelloAccessoryConsumer)

[Transferring the package...]
    Transferred the package: wgt stream -> /opt/usr/apps/tmp/HelloAccessoryConsumer.wgt

[Installing the package...]
path is /opt/usr/apps/tmp/HelloAccessoryConsumer.wgt
start process (install)
....
error : 61

end process (fail)
processing result : FATAL_ERROR [61] failed
spend time for pkgcmd is [1537]ms
cmd_ret:61
    An exception occurred
(Installing the package... > Fail)
An exception occurred
Unexpected stop progress...
(8.239 sec)

Резюме: я установил приложение с API 2.2 и никаких других изменений не делал.

Андроид

Используя пример приложения, ничего не меняя, я смог запустить его и подключиться к умным часам! Юпи :) !

Но мне нужно было знать, почему код, который я использовал в первый раз, был неправильным, даже если я получил его из учебника и веб-сайта Samsung.

Я обнаружил, что приложение удаляется, только если у меня есть эти строки в AndroidManifest.xml

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK"/>
<uses-permission android:name="com.samsung.wmanager.APP"/>
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION"/>

Если бы я заменил строки выше строками ниже

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<uses-permission android:name="com.samsung.WATCH_APP_TYPE.Companion" />
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION" />

все было в порядке.

Может кто-нибудь объяснить мне, почему это так?

******* РЕДАКТИРОВАТЬ 2 **********

Для тех, кто будет искать ответ на вопрос из предыдущей редакции. Я нашел его здесь

Короче говоря:

 <uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />

это строка, которая должна присутствовать, иначе приложение будет удалено с устройства Android. Я не нашел этого ни в одной документации, если честно.

Более того,

<uses-permission android:name="com.samsung.WATCH_APP_TYPE.Companion" />

определяет, что приложение для умных часов будет установлено отдельно от приложения для Android. После изменения Companion на Integrated сообщается, что приложение SmartWatch интегрировано и будет установлено с приложением поставщика Android.


person Baks    schedule 17.02.2017    source источник
comment
Почему вы меняете required_version на 2.2?   -  person Iqbal hossain    schedule 20.02.2017
comment
Потому что, когда я использовал версию по умолчанию (2.3.1), я всегда получал ошибку невозможного развертывания. Я могу проверить это снова сегодня вечером, потому что я обновил свой сертификат. Тем не менее, вы думаете, что это может вызвать проблему с удалением приложения Android?   -  person Baks    schedule 20.02.2017
comment
2.2 может не поддерживаться SAP   -  person Iqbal hossain    schedule 20.02.2017
comment
Я думаю, что это так, потому что я могу запустить приложение на своих умных часах, и оно попытается найти провайдера. Проблема в том, что на стороне Android приложение провайдера удаляется после установки.   -  person Baks    schedule 20.02.2017
comment
Может быть для ‹uses-permission android:name=com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY /› этот   -  person Iqbal hossain    schedule 21.02.2017


Ответы (1)


Следовать

person Iqbal hossain    schedule 20.02.2017
comment
Это именно то, что я сделал. Веб-приложение Tizen нельзя установить на часы Samsung Gear 2, если версия API не изменена на 2.2. После этого изменения я могу собрать и развернуть приложение. Я могу запустить его на своих часах, и я не получаю ошибки безопасности. Он пытается подключиться, но не находит приложение провайдера на телефоне Android. Когда я пытаюсь установить пример для провайдера Android, у меня возникает ошибка, описанная выше. Кратко: На умных часах работает, на андроиде нет :) - person Baks; 20.02.2017
comment
Я попробую их снова сегодня вечером и сообщу мне завтра о результатах. - person Baks; 20.02.2017