Ich habe eine Instant App entwickelt, die auf Google Tutorials und Beispielen basiert. Wenn ich versuche, mit der Produktion zu beginnen, sehe ich einen Fehler: Nicht aktualisierbar für installierte App
PROBLEM
Einige Nutzer dieser Instant-App-APKs sind für keine der APKs in Ihrer installierten App berechtigt.
Lösung
Stelle sicher, dass das Targeting deiner Instant-App-APKs mit dem Targeting deiner APKs übereinstimmt.
Projektstruktur: Es gibt zwei Szenarien, 1.:
base - baseFeature, minSdk 18, targetSdk 26
%Vor%item-details feature - minSdk 18, targetSdk 26
%Vor%ui - Funktion nicht im Modul enthalten, minSdk 18, targetSdk 26, Modul enthält alle Ansichten
%Vor%Instant - Instant-App-Modul MinSDK 18 oder 23, ZielSDK 26
%Vor%apk - apk Modul, minSdk 18, targetSdk 26
%Vor%Das zweite Szenario enthält den Elementdetailcode in baseFeature.
Die Instant App wird von Android Studio und von der Google Play-Entwicklung und Vorabversion ausgeführt. Auch wenn ich versuche, auf die installierte App zu aktualisieren, funktioniert alles einwandfrei. Meiner Meinung nach ist das Targeting korrekt, aber Google Play Console denkt anders.
Kennen Sie irgendwelche Ideen zur Einführung von Instant-Apps? Bitte helfen Sie :( Ich arbeite seit 3 Tagen an dieser Version und kann die App nicht mehr einführen.
UPDATE 10.09.2017 APK Details:
%Vor%Laut der Dokumentation von Android
Mit dem Tool
aapt
, das im Android SDK enthalten ist, können Sie ermitteln, wie Google Play Ihre Anwendung anhand der angegebenen Funktionen und Berechtigungen filtern kann. Führen Sie dazuaapt
mit dem Befehldump badging
aus. Dies führt dazu, dass aapt das Manifest Ihrer Anwendung analysiert und dieselben Regeln anwendet, die auch von Google Play verwendet werden, um die Funktionen zu ermitteln, die von Ihrer Anwendung benötigt werden.
Wenn Sie diesen Befehl auf Ihren installierbaren und sofortigen App-Dateien ausführen, werden die folgenden Informationen gedruckt.
Installierbare App (Version 551):
%Vor%Sofortige App-Basisfunktion:
%Vor%Instant-App-Funktion APK:
%Vor% Wie Sie sehen können, fordert Ihre installierbare App die Berechtigungen ACCESS_COARSE_LOCATION
und ACCESS_FINE_LOCATION
an, die fügt implizit eine Anforderung des Features android.hardware.location
hinzu. Auf dieselbe Weise beinhaltete die Berechtigung ACCESS_WIFI_STATE
das Feature android.hardware.wifi
. Ein Benutzer, der weder GPS noch WiFi auf seinem Gerät hat (das klingt seltsam, aber solche Geräte existieren in der freien Wildbahn), wird nicht in der Lage sein, Ihre Instant-App auf die installierbare zu aktualisieren.
Eine weitere Sache, die die Verfügbarkeit Ihrer installierbaren App einschränkt, ist das Feature android.hardware.screen.portrait
, das impliziert wurde, weil:
Eine oder mehrere Aktivitäten haben eine Hochformat-Ausrichtung angegeben
Um alle diese Probleme zu beheben und die installierbare App für alle Benutzer der Instant-App verfügbar zu machen, fügen Sie dem Manifest Ihrer installierbaren App (auf der Ebene unterhalb des Tags <manifest>
) den folgenden Block hinzu:
Die Funktionen android.hardware.location.network
und android.hardware.location.gps
erfüllen folgende Anforderungen: Anforderung :
Wenn Ihre App auf Android 5.0 (API-Level 21) oder höher abzielt und die Berechtigung
ACCESS_COARSE_LOCATION
oderACCESS_FINE_LOCATION
verwendet, um Standortaktualisierungen vom Netzwerk bzw. einem GPS zu erhalten, müssen Sie auch explizit Ihre App deklarieren verwendet die Hardwarefunktionenandroid.hardware.location.network
oderandroid.hardware.location.gps
.
Übrigens, die andere Möglichkeit herauszufinden, welche Funktionen die installierbare App benötigt, sind die APK-Details Infobildschirm im Bereich "App-Versionen" der Google Play-Konsole.
Diese Nachricht macht einen perfekten Sinn. Schau dir einfach die Funktionen an, die von deiner installierten App benötigt werden (du kannst classyshark dafür verwenden). Wenn Sie ein Telefon benötigen, weil Sie nach Dialer-Berechtigungen fragen oder Sie es nur manuell angefordert haben, oder wenn Sie mindestens GSL Version 2 für Ihre installierten Versionen anfordern, dann ist es sinnvoll, dass ein Teil der Benutzer diese Kriterien nicht erfüllt, aber hat Android 6+ wird nicht in der Lage sein, Ihre installierte Version zu verwenden, sondern nur die Instant Version.
Wenn Sie sich das Manifest Ihrer installierten App und Ihre Instant-App über den obigen Kommentar ansehen, liegt ein Problem mit Ihrem minSdk vor. Ihre installierte App hat minSdk 18, und Ihre Instant-App legt kein minSdk fest. Setze minSdk 18 auf das Manifest der Instant App Base und schau, ob das erledigt ist.
Intuitiv schützt dieser Validator vor einem Szenario, das nicht passieren kann: Ein Benutzer, der vor dem JB war, erhält Ihre Instant-App und kann kein Upgrade auf die installierte App durchführen. Weil die Instant-Apps-Laufzeit selbst nicht so weit zurück geht. Der Validator ist in der Tat dumm. Es schaut nur auf diese MinSdk-Werte. Aber das ist wahrscheinlich so, wie wir es uns wünschen, da sich die Laufzeitkompatibilität immer mehr auf ältere Geräte verlagert, und zwar ohne erneute Veröffentlichung. (Es ist extrem unwahrscheinlich, dass wir jemals so weit zurückkommen werden, wie sdk 17. Nur vorbeugend rechtfertigen wir, warum wir diesen Validator nicht "klüger" machen wollen.)
Tags und Links android android-instant-apps google-play-console