2016-05-16 6 views
1

NativeScript 2.0.0 Windows 10Ausgabe mehr als eine NativeScript Anwendung auf demselben Android-Gerät läuft mit tns läuft

Beim Versuch, mehr als eine NativeScript Anwendung auf demselben Android-Gerät laufen läuft die tns android Befehl stoppt mit Nachricht:

Successfully deployed on device with identifier '192.168.99.100:5555'. 

Die Anwendung ist nicht installiert.

Nach einigen Untersuchungen habe ich versucht, die App auf dem Android-Gerät mit adb direkt zu installieren:

adb "-s" "192.168.99.100:5555" "install" "-r" "<path to apk>.apk" 

Der Befehl mit dem folgenden antwortet:

961 KB/s (15394490 bytes in 15.642s) 
WARNING: linker: /system/lib/libhoudini.so has text relocations. This is wasting memory and prevents security hardening. Please fix. 
     pkg: /data/local/tmp/<app name>-debug.apk 
Failure [INSTALL_FAILED_CONFLICTING_PROVIDER] 

Nach einigen Untersuchungen auf INSTALL_FAILED_CONFLICTING_PROVIDER und gefunden die folgenden Verbindungen:

kann ich sagen, dass es ein hässliches Problem.

Im NativeScript-Projekt suchen wir im Verzeichnis \ platforms \ android \ build \ intermediates \ explodierte-aar \ com.google.android.gms \ play-services-measurement \ 8.4.0 nach einem Verzeichnis Vorlage Manifest, das enthält:

<provider 
     android:authorities="${applicationId}.google_measurement_service" 
     android:name="com.google.android.gms.measurement.AppMeasurementContentProvider" 
     android:exported="false"/> 

Aber applicationId wird nie definiert, so dass, wenn mehr als eine App mit diesem Anbieter hinzugefügt wird, schlägt der zweite zu installieren.

+0

Ist das ein Lager Emulator, geny oder echtes Gerät? Welches Gerät/welche Version? – Nathanael

Antwort

2

Ich habe mehrere NS-Apps auf meinem Telefon und Emulatoren installiert; wenn Sie jedoch eine neue App erstellen; Überprüfe, ob du irgendwie den gleichen internen Namen erhalten hast. (Dies kann leicht passieren, wenn Sie Ihr vorheriges Projekt duplizieren)

Öffnen Sie Ihre primäre/primäre package.json-Datei, die sich im äußersten Stamm Ihres Projektordners befindet.

Innerhalb dieser package.json Datei, die Sie einen Schlüssel haben sollten:

"nativescript": { 
     "id": "org.nativescript.test3", 
     "tns-android": { 
      "version": "2.0.0" 
     } 
    }, 

Die „id“ ist der zugrunde liegende Name der Anwendung, die auf dem Handy installiert wird. In diesem Fall; Das ist das großartige Projekt "org.nativescript.test3".

Wenn Sie doppelte IDs erhalten, dann überschreibt die App einander beim Deployen.


Es gibt einen zweiten Grund, warum dies geschehen kann, und die eigentliche Ursache für dieses Problem wurde auch durch den Autor der Frage herausgefunden. Aber ich werde hier für alle zukünftigen Leute bleiben, die in dieses Problem geraten könnten, damit wir eine gültige Antwort haben.

Der Autor verwendete das Google Play-Dienst-Plug-in. Es verfügt über einen AppMeasurementContentProvider. Wenn in Ihrer Konfiguration keine Anwendungs-ID festgelegt ist, wird standardmäßig eine leere ID verwendet. was bedeutet, dass es einen Konflikt mit jeder anderen App geben wird, die GPS verwendet, das auch keinen ApplicationId-Satz hat.

Die wirkliche Gemeinheit dieses Fehlers ist, dass es zu JEDER APP von JEDEM anderen Entwickler in Konflikt kommt, der auch seine applicationId leer gelassen hat. Und dann wäre nur EINE der Apps installierbar. Jede andere App, die eine leere ApplicationId hat, wäre auf diesem Gerät nicht installierbar.

Die Lösung ist, Ihre /app/App_Resources/Android/app.gradle Datei zu öffnen, und wir werden einen neuen Wert hinzufügen.

Die aktuelle Version ab NativeScript v2.00 sieht ungefähr so ​​aus:

android { 
    defaultConfig { 
    generatedDensities = [] 
    } 
    aaptOptions { 
    additionalParameters "--no-version-vectors" 
    } 
} 

Wenn Sie den ersten Teil dieser Antwort und über doppelten IDs erinnern; Die package.json, auf die wir verwiesen haben, gibt Ihnen den Namen, den Sie verwenden möchten. Also in meinem Fall würde ich

defaultConfig { 
    applicationId = "org.nativescript.test3" 
} 

So ist die letzte Datei soll in etwa so aussehen zu dem hinzufügen:

android { 
    defaultConfig { 
    generatedDensities = [] 
    applicationId = "org.nativescript.test3" 
    } 
    aaptOptions { 
    additionalParameters "--no-version-vectors" 
    } 
} 

Dies bezieht mich auf: Install shows error in console: INSTALL FAILED CONFLICTING PROVIDER https://code.google.com/p/analytics-issues/issues/detail?id=784

0

Diese Umgehungs arbeiteten me:

in der Datei app/App_Resources/Android/AndroidManifest.xml hinzufügen:

<provider 
    tools:replace="android:authorities" 
    android:name="com.google.android.gms.measurement.AppMeasurementContentProvider" 
    android:authorities="MY_APPLICATION_ID.gms.measurement.google_measurement_service" 
    android:exported="false" /> 

Wo MY_APPLICATION_ID der Anwendung ist das Paket (es ausdrückte manuell weil __PACKAGE__ funktionierte nicht) nicht de Werkzeuge Namensraum zu erklären Vergessen:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
package="__PACKAGE__" ...> 
+0

Ref: https://code.google.com/p/analytics-issues/issues/detail?id=784 – mnesarco