Próbuję uruchomić samodzielną aplikację do noszenia na urządzeniu (fizycznym) Nosić urządzenie OS, uruchomienie Oreo 8.1. Aplikacja opiera się pomyślnie i działa dobrze na emulatorze kwadratowym Android Wear (API 26), ale kiedy próbuję uruchomić aplikację na fizycznym urządzeniu, otrzymuję następujący błąd:

Caused by: java.lang.IllegalStateException: Could not find wearable shared library classes. 
Please add <uses-library android:name="com.google.android.wearable" android:required="false" /> to 
the application manifest

Wraz z kodeksem błędu, linia

<meta-data. android:name="com.google.android.wearable". android:value="false" />

Został już dodany do aplikacji manifestuje plik (androidmanifest.xml) wewnątrz znacznika aplikacji. Poniżej przedstawiono zawartość aplikacji aplikacji w manifestowym pliku.

<application
android:allowBackup="false"
android:label="@string/app_name"
android:theme="@android:style/Theme.DeviceDefault">

<meta-data
    android:name="com.google.android.wearable.standalone"
    android:value="true" />

<uses-library android:name="com.google.android.wearable" android:required="false" />

<activity android:name="com.example.android.wearable.wear.alwayson.MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleInstance"
    android:configChanges="orientation|keyboardHidden"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Nawet przy sugerowanej linii dodanej do pliku manifestu Androida nadal otrzymuję dokładny kod błędu.

Podejrzewam, że wersja biblioteki na urządzeniu nie jest taka sama jak wykorzystuje nasze środowisko rozwoju, jednak nie wiem, jak znaleźć i sprawdzić wersję biblioteki urządzeń.

Czy ktoś może zaproponować rozwiązanie tego problemu?

Buduj informacje:

compileSdkVersion 28

buildToolsVersion "28.0.3"

defaultConfig {
  versionCode 1
  versionName "1.0"

  minSdkVersion 24

  targetSdkVersion 27

  multiDexEnabled true
}

Zależności:

dependencies {

  implementation 'androidx.wear:wear:1.0.0'
  implementation 'androidx.legacy:legacy-support-v13:1.0.0'

  implementation 'com.google.android.gms:play-services-wearable:17.0.0'

  compileOnly 'com.google.android.wearable:wearable:2.1.0'

  implementation 'com.google.android.support:wearable:2.1.0'
 }

Sugerowano w komentarzach, które zmieniam z compileOnly do implementation. Oto pojawia się komunikat o błędzie:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.wearable.wear.alwayson, PID: 2593
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.wearable.wear.alwayson/com.example.android.wearable.wear.alwayson.MainActivity}: java.lang.RuntimeException: Stub!
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6501)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.RuntimeException: Stub!
        at com.google.android.wearable.compat.WearableActivityController$AmbientCallback.<init>(WearableActivityController.java:6)
        at androidx.wear.ambient.WearableControllerProvider$1.<init>(WearableControllerProvider.java:52)
        at androidx.wear.ambient.WearableControllerProvider.getWearableController(WearableControllerProvider.java:51)
        at androidx.wear.ambient.AmbientDelegate.onCreate(AmbientDelegate.java:103)
        at androidx.wear.ambient.AmbientModeSupport.onCreate(AmbientModeSupport.java:198)
        at androidx.fragment.app.Fragment.performCreate(Fragment.java:2414)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
        at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:620)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1335)
        at android.app.Activity.performStart(Activity.java:7019)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2741)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6501) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

Nie wydaje się być dużo informacji online na temat konfiguracji i rozwijania się na zużycie Androida, więc docenione zostaną wskaźniki przy użytecznych zasobach.

-------- Updated 6 kwietnia oparty na nowych testach

W oryginalnym poście pokazałem tylko znacznik aplikacji pliku manifestów. Poza tagiem aplikacji zawierał linię:

<uses-feature android:name="android.hardware.type.watch" />

Wykorzystanie przestarzałych bibliotek po prostu z powodu użycia dostarczonych (przestarzałych) próbek, które pojawiły się z pakietem źródłowym urządzenia. Pierwotnie poszedłem za samouczkiem dostarczonym przez Google (ten sam link, który pod warunkiem, który wykorzystuje do noszenia: 2.5.0) i nie powiodło się - zwraca ten sam błąd podany w oryginalnym poście.

Wypróbowałem wiele przykładowych aplikacji zawartych w podanej lokalizacji, zanim opublikowałem tak dobrze, jak również próbki podane w pakiecie źródłowym dla zestawu programistycznego - wszystkie wyniki w tym samym błędu.

Oto pełny kod błędu, który został opublikowany oryginalnie. Dzieje się tak, gdy urządzenie próbuje uruchomić aplikację.

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.wearable.speaker, PID: 3230
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.wearable.speaker/com.example.android.wearable.speaker.MainActivity}: java.lang.IllegalStateException: Could not find wearable shared library classes. Please add <uses-library android:name="com.google.android.wearable" android:required="false" /> to the application manifest
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6501)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.IllegalStateException: Could not find wearable shared library classes. Please add <uses-library android:name="com.google.android.wearable" android:required="false" /> to the application manifest
        at androidx.wear.ambient.SharedLibraryVersion.verifySharedLibraryPresent(SharedLibraryVersion.java:57)
        at androidx.wear.ambient.WearableControllerProvider.getWearableController(WearableControllerProvider.java:48)
        at androidx.wear.ambient.AmbientDelegate.onCreate(AmbientDelegate.java:103)
        at androidx.wear.ambient.AmbientModeSupport.onCreate(AmbientModeSupport.java:198)
        at androidx.fragment.app.Fragment.performCreate(Fragment.java:2586)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:838)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2663)
        at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManagerImpl.java:2613)
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:246)
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:542)
        at com.example.android.wearable.speaker.MainActivity.onStart(MainActivity.java:254)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1335)
        at android.app.Activity.performStart(Activity.java:7019)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2741)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6501) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

Sprawdziłem kod, w którym wyjątek jest rzucony i najwyraźniej jest to spowodowane brakiem posiadacza precenti dla biblioteki wspólnej, stara się zweryfikować istnienie. Poniżej znajduje się funkcja w pliku "Sharedlibraryversion.java".

/**
 * Throws {@link IllegalStateException} if the Wearable Shared Library is not present and API
 * level is at least LMP MR1.
 * <p>
 * <p>This validates that the developer hasn't forgotten to include a {@code <uses-library>} tag
 * in their manifest. The method should be used in combination with API level checks for
 * features added before {@link #version() version} 1.
 */
public static void verifySharedLibraryPresent() {
    if (!PresenceHolder.PRESENT) {
        throw new IllegalStateException("Could not find wearable shared library classes. "
                + "Please add <uses-library android:name=\"com.google.android.wearable\" "
                + "android:required=\"false\" /> to the application manifest");


Z tego wygląda tak, jakby biblioteka noszenia nie jest na urządzeniu, czy jest, ale nie może go znaleźć / łączyć?

Zgodnie z komentarzem Martina, sugerując, że jeśli noszone aplikacje z PlayStore'a można uruchomić, lib powinien istnieć na urządzeniu, próbowałem zainstalować niektóre aplikacje do noszenia. The SDK Verison na zestawie dev nie ma sklepu zabaw, więc próbowałem zrzucić niektóre, które znalazłem online za pośrednictwem ADB.

Podczas gdy ADB zwrócił sukces, gdy Runnig "ADB zainstaluj appname.apk" Żadna z aplikacji faktycznie pojawiła się z wyjątkiem jednego, apkpure, która jest aplikacją samą sideloader, który działa na urządzeniu. Próbując zainstalować aplikacje do noszenia za pośrednictwem Apkpure na zestawie dev, również nie działało, ponieważ otrzymuję "Install / Deinstall Actions nie są obsługiwane na zużyciu". Wydaje się, że jest to spowodowane Packagemanger blokującym instalację arbitralnych APKS - wygląda jak martwy koniec.

0
deandob 20 marzec 2020, 12:42

1 odpowiedź

Najlepsza odpowiedź

Utwórz aplikację OSE OS dla, że brakuje jednego węzła, który robi nie należy do węzła application:

<uses-feature android:name="android.hardware.type.watch" />

Jak również, używasz przestarzałych bibliotek:

dependencies {
    implementation 'androidx.wear:wear:1.0.0'
    implementation 'com.google.android.gms:play-services-wearable:17.0.0'
    implementation 'com.google.android.support:wearable:2.5.0'
    compileOnly 'com.google.android.wearable:wearable:2.5.0'
}

I na podstawie innych wartości, które powinny być:

targetSdkVersion 28

Jeśli nie działa, spróbuj uruchomić dowolną z wear-os-samples dla porównanie.

Jeśli nosić aplikacje z sklepu odtwarzania, znajdzie go, można założyć, że jest dostępny na urządzeniu.


W przypadku, gdy używasz Otwórz Q ™ 2500 Zestaw programistycznych, może być konieczne flashowanie innego oprogramowania układowego. Tracker wydania jest dla samego składnika, który najprawdopodobniej nie dotyczy tutaj; Lepsze Skontaktuj się z Intryjską Technologies Corporation Obsługa Departament.

2
marc_s 9 kwiecień 2020, 11:20