Telkens wanneer u een Android-app vrijgeeft, heeft u op zijn minst een idee van wat u met deze app wilt bereiken.
Deze doelen kunnen heel specifiek zijn, zoals het genereren van een bepaald aantal advertentie-inkomsten in het eerste kwartaal, of ze kunnen algemener zijn, zoals een hoge beoordeling krijgen op Google Play.
Wat er nog meer op uw verlanglijstje staat, uw app voor zoveel mogelijk gebruikers laten verschijnen altijd ergens in die lijst zal verschijnen - en Android Instant Apps is een nieuwe functie die u daarbij kan helpen.
Instant-apps bieden u een geheel nieuwe manier om gebruikers te bereiken die uw app momenteel niet op hun apparaat hebben geïnstalleerd, door uw app vindbaar en toegankelijk te maken vanaf elke locatie die URL's ondersteunt, inclusief e-mails, zoekresultaten van Google, berichten op sociale media platforms, YouTube-opmerkingen en forums.
In feite kunt u met Instant Apps elk van de functies van uw app scheiden in een zelfstandige module. Gebruikers kunnen vervolgens onmiddellijk een van deze modules voor instant-apps laden door op een URL te tikken die u aan deze specifieke module hebt toegewezen, en zonder je app op elk gewenst moment moet installeren.
In deze driedelige serie laat ik je zien hoe je instant-app-ondersteuning kunt toevoegen aan je Android-projecten. Aan het einde van deze serie hebt u een toepassing gemaakt die bestaat uit twee afzonderlijke instantiemodule voor instant-apps, die u kunt starten en testen op elk compatibel Android-apparaat..
In dit eerste bericht zal ik me concentreren op wat Instant-apps zijn, hoe ze werken en waarom je om ze moet geven. Om u een directe ervaring met Instant Apps te bieden, zullen we de projectcreatie-wizard van Android Studio gebruiken om een app te genereren die vooraf is geconfigureerd met ondersteuning voor Instant-apps, zodat u alle verschillende Instant App-componenten kunt bekijken dan alleen maar over ze te lezen.
Hoewel het maken van een app die vooraf is geconfigureerd met Instant App-ondersteuning de snelste en eenvoudigste manier is om deze functie te gebruiken, is het in werkelijkheid veel waarschijnlijker dat u instant-app-ondersteuning toevoegt aan een bestaand project. Dus in deel twee laat ik u zien hoe precies dat te doen. Ik zal een app leveren die u kunt downloaden van GitHub en vervolgens door het stapsgewijze proces van het opnieuw configureren van dit project leiden om Instant-apps te ondersteunen.
Het laatste stukje van de puzzel is het maken van een veelzijdige Instant-app, dus in deel drie laat ik zien hoe je een tweede functiemodule toevoegt aan je applicatie en hoe je Android-app-links gebruikt om deze module aan een andere URL te koppelen..
Een van de beste manieren om Instant Apps te beschrijven, is door een voorbeeld te bekijken van wanneer u ze zou kunnen gebruiken.
Stel je voor dat een vriend je een link naar een kattenvideo heeft gestuurd die ze je beloven te gaan doen liefde, maar als je op de link tikt, wordt het duidelijk dat je een app moet downloaden voordat je deze specifieke video kunt bekijken.
Ongeacht of u de app uiteindelijk downloadt of de link negeert en het risico loopt de beste kattenvideo te missen die internet te bieden heeft, dit is een slechte gebruikerservaring - en het is een scenario dat veel Android-gebruikers kennen.
De meesten van ons hebben de ervaring gehad om een app te installeren om een eenmalige taak te voltooien. U kunt bijvoorbeeld een app downloaden om een e-mailbijlage te bekijken die iemand u heeft gestuurd, om een aankoop op een specifieke website te voltooien of om een pakket te traceren dat momenteel op weg is naar uw adres.
Stel nu ons katvideoscenario opnieuw voor, maar deze keer heeft de ontwikkelaar van de app alle code en bronnen die nodig zijn om video-inhoud te spelen in zijn eigen instant-app-functiemodule geplaatst en deze module toegewezen aan de www.example.com/video URL. Deze keer wanneer u op www.example.com/video/cat-video tikt, erkent Google Play dat deze URL is gekoppeld aan een instant-appmodule en alle code en bronnen ophaalt die u nodig hebt om deze video af te spelen. Het eindresultaat? Je kunt 20 seconden spelen van een kat die in een doos speelt zonder iets te hoeven installeren, wat een veel betere gebruikerservaring.
Zoals u zult zien in het volgende bericht in deze serie, kan het toevoegen van Instant App-ondersteuning aan een bestaand project een ontmoedigend proces zijn, waarbij u vaak de manier moet veranderen waarop uw toepassing is gestructureerd.
Omdat het herstructureren van een project geen besluit is dat je ooit licht zou moeten nemen, ga ik in deze sectie je helpen beslissen of al die tijd en moeite echt de moeite waard is, door alle belangrijke voordelen te dekken van het toevoegen van Instant App-ondersteuning aan je projecten:
Voordat we onze instant-reis van de app starten, is het de moeite waard om op te merken dat er momenteel een paar dingen zijn die instant-apps zijn kan niet do:
Bovendien moet uw aanvraag:
Als uw app tot slot deel uitmaakt van het Designed for Families-programma, kunt u deze niet als instant-app aanbieden.
Voordat u uw eerste project met directe app-ondersteuning kunt maken, moet u het volgende of een hogere geïnstalleerd hebben:
Je moet ook zorgen dat je de nieuwste versies van de Android Support Library en Android Repository hebt, dus open de SDK Manager van Android Studio en installeer eventuele beschikbare updates.
Zodra u al het bovenstaande heeft geïnstalleerd, kunt u de SDK voor Instant Apps-ontwikkeling downloaden:
Momenteel kunt u alleen instant-apps testen op een Nexus 5X, Nexus 6P, Pixel, Pixel XL of een Galaxy S7 met Android 6.0 of hoger. Als u echter geen van deze apparaten bezit, kunt u een Android Virtual Device (AVD) maken dat een van deze apparaten emuleert, met enkele voorwaarden: de AVD moet een x86-afbeelding gebruiken en deze moet de Google API's bevatten.
Omdat ik geen van deze apparaten bezit, ga ik een AVD maken die een pixel emuleert:
Ten slotte moet u zich aanmelden bij een Google-account op uw AVD:
In Android Studio 3.0 Preview 1 en hoger is het maken van een project met ingebouwde Instant App-ondersteuning net zo eenvoudig als het selecteren van een selectievakje, dus in plaats van alleen de functies van Instant-apps te beschrijven, gaan we een Instant-app-project maken en vervolgens uitgeven de rest van dit artikel krijgt wat ervaring uit de eerste hand met zijn verschillende componenten.
Houd er rekening mee dat dit project geen app-links bevat, dus u kunt de Instant App-componenten niet testen op uw AVD (dit zullen we in deel twee in detail bekijken).
Om uw project te maken:
Meteen kunnen we zien dat dit project heel anders is gestructureerd dan je typische Android-project en dat het uit de volgende modules bestaat:
Met uitzondering van de featiemodule, elk project dat instant-apps ondersteunt moet hebben alle bovenstaande modules, dus laten we elk van deze modules in detail bekijken.
Het concept van een applicatiemodule is misschien niets nieuws, maar wanneer uw project instant-apps ondersteunt, ziet het Manifest van de applicatiemodule er veel leger uit dan u waarschijnlijk gewend bent:
Er is een reden waarom dit bestand zo leeg is: wanneer je je project bouwt, de inhoud van alle andere Manifest-bestanden die zich in je hele basis functie en voorzien zijn van modules worden samengevoegd met dit bestand, dus het blijft niet voor altijd leeg!
Als u deze modules opent build.gradle bestand, dan merk je twee nieuwe elementen:
afhankelijkheden implementatieproject (': feature') implementatieproject (': base')
Hier verklaren we dat onze applicatiemodule een afhankelijkheid heeft van de voorzien zijn van
module en baseren
module.
Wanneer u ondersteuning voor instant-apps aan een project toevoegt, scheidt u gerelateerde code en bronnen in featuremodules die onafhankelijk van de installeerbare toepassing kunnen functioneren. Deze modules vormen echter nog steeds delen van uw installeerbare app in plaats van afzonderlijke entiteiten. Daarom verklaart onze toepassingsmodule de functie- en basismodules als afhankelijkheden..
Elk instant-app-project moet een module met één basisfunctie bevatten, die de code en bronnen bevat die in alle modules van uw toepassing worden gebruikt. Bijvoorbeeld als u onze projecten opent base / res / mipmap map, dan zie je alle lanceer-iconen van de applicatie, die duidelijk in meerdere modules zullen worden gebruikt.
Omdat het gemeenschappelijke code en bronnen bevat, allemaal van de kenmerkmodules van uw project is afhankelijk van deze module met enkelvoudige basisfunctie.
Als u dit thema voortzet, bevat de basismeldingsmodule de Manifest-vermeldingen die in uw gehele project worden gebruikt. Bijvoorbeeld uw project base / src / main / AndroidManifest.xml bestand bevat de instellingen voor het pictogram, het thema en het label van uw toepassing:
Het andere opvallende element is de basismodule build.gradle bestand, dat een paar nieuwe attributen bevat:
// Alle basisfuncties en "reguliere" functiemodules gebruiken de plugin com.android.feature in plaats van de plugin com.android.app // apply plugin: 'com.android.feature' android compileSdkVersion 26 buildToolsVersion "26.0.0 "// Specificeer dat dit de enige basisfunctie van het project is, gebruikmakend van de 'baseFeature true'-expressie // baseFeature true ... ... ... afhankelijkheden // Gebruik' applicatieproject 'om een afhankelijkheid van de basismogelijkhedenmodule toe te voegen aan uw project installeerbare 'app' module // applicatie project (': app') // Gebruik 'feature project' om te verwijzen naar de feature module van ons project, toepasselijk genaamd 'feature' // feature project (': feature')
Je zult ook merken dat dit bijzonder is build.gradle bestand ontbreekt een Applicatie ID
attribuut, en (spoiler alert) vind je precies hetzelfde wanneer we onze feature-modules komen inspecteren build.gradle het dossier. Onze projecten Applicatie ID
wordt gedeclareerd in de applicatiemodules build.gradle het dossier enkel en alleen.
De applicatie project (
:
app)
regel in onze basismodules build.gradle bestand (zie hierboven) zorgt ervoor dat de single van het project Applicatie ID
attribuut wordt overgezet allemaal van onze build.gradle bestanden, dit is waarom dit kenmerk ontbreekt in de rest van ons project.
Wanneer u uiteindelijk Instant App-ondersteuning gaat toevoegen aan een bestaand project, is uw grootste taak het extraheren van elk van de functies van uw toepassing in zijn eigen functiemodule, omdat elke functiemodule de code en bronnen bevat die nodig zijn om deze functie te leveren enkel en alleen.
Als je onze projecten opent voorzien zijn van module, dan zult u zien dat het de bevat Hoofdactiviteit
klas, plus activity_main en content_main bronbestanden - in essentie alle componenten die zijn opgenomen in de Basisactiviteit sjabloon.
Een module met een enkele functie kan uit meerdere activiteiten bestaan, maar elke module moet ten minste één activiteit hebben die is aangewezen als beginpunt voor deze module..
Elke startpuntactiviteit is toegewezen aan een specifieke URL, zodat wanneer de gebruiker op deze URL tikt, de bijbehorende activiteit wordt geladen en de gebruiker toegang heeft tot deze specifieke kenmerkmodule.
U duidt de startpuntactiviteit van een module aan via het manifest van die module. In essentie moet u dit bestand openen en het volgende toevoegen aan de activiteit die u als uw startpunt wilt gebruiken:
CATEGORY_LAUNCHER
en ACTION_MAIN
intenties.
element met alle informatie over de URL die u wilt toewijzen aan deze ingangspunt Activiteit. android: autoVerify
attribuut. Dit vertelt het systeem om te controleren of uw app toestemming heeft om op te treden als standaard handler voor deze specifieke URL. Dit is een belangrijk beveiligingsmechanisme dat eigenaren van websites helpt beschermen tegen kwaadwillende apps die hun URL's proberen te kapen.Als u het manifestbestand van onze featiemodule opent, ziet u dat al deze code al aan ons is toegevoegd Hoofdactiviteit
verklaring:
Het laatste bestand dat we in deze module gaan bekijken, is het build.gradle bestand, dat een paar regels opmerkelijke code bevat:
// Nogmaals, we gebruiken com.android.feature plugin, in plaats van com.android.application // apply plugin: 'com.android.feature' android // Zoals eerder vermeld, ontbreekt in dit gedeelte een 'applicationID' attribute // ... ... ... dependencies implementatie fileTree (dir: 'libs', include: ['* .jar']) androidTestImplementation ('com.android.support.test.espresso: espresso-core: 2.2.2', exclude group: 'com.android.support', module: 'support-annotaties') // Alle feature-modules hebben een afhankelijkheid van de base feature-module, die we hier verklaren // implementatieproject (': base') testImplementation 'junit: junit: 4.12'
Omdat alle kenmerkmodules afhankelijk zijn van de basismeldingsmodule, is dit de eerste keer dat de gebruiker daarom vraagt ieder functie van uw toepassing ontvangen, ontvangen zij de basisfunctie-module plus de feature-module die ze proberen te openen.
Merk op dat dit specifieke project weliswaar bestaat uit een module met basisfuncties en een functiemodule, als uw app slechts één functie heeft die u beschikbaar wilt stellen als een instant-app, dan is het mogelijk om een project te maken dat bestaat uit een basismodule enkel en alleen. We zullen in deze serie kijken naar beide typen van Instant App-projecten.
De Instant App-module heeft een eenvoudig doel: het fungeert als een container die al uw featuremodules neemt en deze verandert in Instant App APK's.
Als u de module Instant-app van dit project opent, ziet u dat deze vrijwel leeg is, afgezien van a build.gradle bestand, dat simpelweg uw basiskenmerkmodule en uw featiemodule declareert als afhankelijkheden:
plug-in toepassen: 'com.android.instantapp' afhankelijkheden implementatieproject (': feature') implementatieproject (': base')
Omdat dit project geen app-links bevat, kunnen we de instant-app-componenten niet testen, maar we kunnen dit project nog steeds uitvoeren als een installeerbare app. Dit lijkt misschien niet bijzonder spannend, maar als we bedenken dat het grootste deel van de code en bronnen van ons project zich bevinden in de instant-feature-module, is het belangrijk om te testen hoe ons project functioneert als een installeerbare applicatie.
Start de AVD die we eerder hebben gemaakt of sluit een compatibele fysieke Android-smartphone of -tablet aan op uw ontwikkelingsmachine en selecteer vervolgens Uitvoeren> Uitvoeren ...> app van de Android Studio-werkbalk.
Ondanks het feit dat al onze Hoofdactiviteit
code bevindt zich in de feature-module, zodra onze app wordt geladen, ziet u de Hoofdactiviteit
drijvende actieknop (FAB) en Hallo Wereld bericht. Wat we hier zien, is dat onze toepassingsmodule code en bronnen neemt die zich bevinden in afzonderlijke Instant App-functies en basismodemodules, en deze combineren in een installeerbare app.
In deze zelfstudie hebben we op hoog niveau bekeken hoe Instant-apps werken en hebben we de verschillende redenen onderzocht waarom u Instant-app-ondersteuning wilt toevoegen aan uw Android-projecten..
In een ideale wereld zou je beslissing om Instant Apps te gaan verkennen perfect samenvallen met de start van een nieuw Android-project, maar helaas is een ontwikkelaar zelden handig! Het is veel waarschijnlijker dat u een bestaand project opnieuw moet configureren om Instant Apps te ondersteunen, wat niet het geval is heel zo eenvoudig als het selecteren van een selectievakje in de projectaanmaakwizard van Android Studio!
In het volgende bericht gaan we dieper in op het toevoegen van instant-app-ondersteuning aan een bestaand project. Ik zal je ook laten zien hoe je app-links kunt implementeren, dus aan het einde van het volgende bericht heb je een volledig functionerende instant-app gemaakt die je kunt starten en testen op elk compatibel AVD- of Android-apparaat..
.