Android Instant App: ¿Cómo crear módulos direccionables por URL?
Google ha actualizado su página de información sobre aplicaciones instantáneas recientemente: https://developer.android.com/topic/instant-apps/prepare.html
La mayoría de los puntos son claros excepto "3. Refactore su aplicación, si es necesario". Sugieren para los módulos al por menor como hojear, la búsqueda, detalle del artículo, y la comprobación hacia fuera.
- ¿Cuáles son los tipos de piel en Android Studio?
- ¿Cómo puedo configurar Android Studio para que pueda compilar cuando esté desconectado (desconectado de Internet)
- ¿Cómo enlazar activos de android a escritorio en libgdx?
- Excepción de Android Studio generada durante la reproducción
- Grade Plugin 3-alpha1 outputFile causa error
P: ¿Cómo puedo dividir la aplicación en módulos que sean totalmente funcionales y direccionables por URL? Veo aquí varias cuestiones: – si usamos bibliotecas como dagger, butterknife, … todos los módulos dependen de otros módulos – si nuestros módulos contienen (vistas) según sea necesario, cómo debe una transición a otra vista (de otro módulo ) Ser implementado sin importar este módulo?
¿Puede alguien arrojar luz a la oscuridad? ¡Gracias!
- Mover las carpetas android-sdk y sdk a otra unidad
- App forcecloses en la actividad de inicio de Facebook
- Android Throwing OutOfMemoryError "Error al asignar una asignación de 164 bytes con 44 bytes libres y 44B hasta OOM" (caso recursivo)
- Android Studio generado APK se bloquea al ejecutar la aplicación en el mismo teléfono funciona bien. ¿Qué está mal?
- ¿Dónde colocar la clave API? Recursos, Meta-datos en Manifiesto o variable estática?
- Excepciones de tiempo de ejecución en el inicio de estudio de Android Tiempo de indexación
- Android Studio instala un APK para cada módulo
- Lollipop VMs en Genymotion - posiblemente ARM La traducción no funciona
Consulte los documentos oficiales ahora que Instant Apps está generalmente disponible para los desarrolladores.
Para resumir, todas las aplicaciones instantáneas tendrán por lo menos lo que se llama un módulo de función base que contiene código común a través de la aplicación instantánea. Además, Instant Apps puede tener opcionalmente 1 o más bibliotecas de características adicionales que dependen del módulo de características base. Cada módulo de características puede tener sus propios puntos de entrada que son direcciones URL, aunque los propios módulos de características no necesitan depender entre sí. Si uno necesita llamar al otro, eso puede hacerse a través de un Intención basada en URL.
El diagrama del sitio de docs ayuda un poco:
Todos los módulos de características utilizan el nuevo complemento com.android.feature
, que se utiliza de manera similar al complemento tradicional com.android.library
en términos de cómo se puede utilizar en su proyecto de Android y, por tanto, los documentos de la biblioteca se pueden utilizar como una referencia. En términos de cómo difiere, emitirá un archivo AAR regular cuando se use con su módulo de aplicación instalable y emitirá una característica APK cuando se use con el nuevo módulo de aplicación instantánea.
La separación adecuada de módulos requerida por Instant Apps se puede realizar fácilmente siguiendo estos pasos:
- Cree un módulo compartido que contendrá código y recursos que deben compartirse entre módulos de características.
- Cree varios módulos de características para cada característica principal (en el ejemplo proporcionado por Google: exploración, búsqueda, detalle del elemento y comprobación). Estos módulos pueden depender del módulo compartido creado en p.1, pero no deben saber nada sobre el otro.
- Para iniciar una actividad a partir de un módulo diferente, haga que la actividad objetivo sea direccionable por URL e iníciela por medio de una intención implícita. Google sugiere utilizar Enlaces de la aplicación para eso.
- Para crear tu aplicación Android normal, crea un módulo de aplicación que depende de los módulos de función.
- Una vez que Google publique su SDK de Android InstantApp al público, puede crear sus aplicaciones instantáneas (una por función).
Considere este diagrama.
P: ¿Cómo puedo dividir la aplicación en módulos que sean totalmente funcionales y direccionables por URL?
Módulo base: contiene todos los recursos comunes requeridos por su aplicación. Así que en nuestro caso, todas las actividades de feature1 y feature2 estarían utilizando res compartido de base module.It puede tener bibliotecas como dagger, butterknife.
Ahora es el momento de romper toda tu aplicación en una unidad más pequeña llamada característica. Una sola característica puede consistir en múltiples actividades que sólo pueden dar una idea de su aplicación o lograr una meta que impulsa a los usuarios a instalar esa aplicación. Ahora todo depende de usted que lo que desea entregar al usuario que insisten en descargar su aplicación.
Feature1: Así que tenemos aplicación dividida en feature1 y feature2. En esta función1 estamos dando a los usuarios para buscar y buscar elementos. Siempre que el usuario haga clic en el elemento que tenemos que cargar el detalle de los elementos de feature2 por lo tanto, haga clic en el elemento de la actividad de exploración vamos a llamar como
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://yourdomain.com/itemdetail")); intent.setPackage(getPackageName()); intent.addCategory(Intent.CATEGORY_BROWSABLE); startActivity(intent);
Porque: Activity1 de feature1 no puede llamar directamente Activity2 en feature2. Para hacerlo, debe solicitar la dirección URL de activity2 de activity1.
Feature2: Ahora, Feature2 cargado en la aplicación instantánea así que ahora podemos ver la actividad de los detalles del artículo.
NOTA: También debe considerar el tamaño de la función mientras se divide la funcionalidad de la aplicación porque cada característica no debe exceder el tamaño de 4 MB, de lo contrario se produce la validación mientras se carga apk para reproducir la tienda.
Creo que el módulo de la característica viene con todo debe concepto modular. Al final, cada característica se puede separar en el módulo de características.
Comienzo a entender la nueva forma de estructura del proyecto de esta charla . Me deja claro por algún punto.
Al igual que si creamos el módulo de características y queremos enlazar con el módulo de base de características, probablemente necesitamos eliminar los androidTest
test
y res
androidTest
no utilizados.
También crear proyecto simple con nueva estructura aquí
En este repos, intenta comenzar desde cero siguiendo el documento y encima para cambiar de módulo de aplicación a módulo de función y agregar módulo de aplicación instantánea en codebase.
No estoy seguro de si estoy malinterpretando su pregunta, pero intentaré darle un respiro. Para mi siguiente explicación, haré referencia a este ejemplo de código de Google varias veces. Sugiero ALTAMENTE la clonación de ese repo y jugar con él, ya que creo que va a responder a su pregunta.
Si usamos bibliotecas como dagger, butterknife, … todos los módulos serían dependientes de otros módulos
Como se ha mencionado por otros, las bibliotecas que serán utilizadas por todas sus características irán a su función de base.
Si nuestros módulos contienen (vistas) según sea necesario, ¿cómo debe implementarse una transición a otra vista (desde otro módulo) sin importar este módulo?
Esta respuesta cubre la visión general de ella – pero esta parte parece ser la raíz de su pregunta así que voy a tratar de cavar en un poco más profundo.
Digamos que Feature1 ( BrowseActivity
) quiere abrir Feature2 ( ItemDetailActivity
). En lugar de Feature1 llamar a startActivity(ItemDetailActivity.class)
directamente, tendrá que usar la llamada de método a continuación (esto es porque Feature1 no tiene acceso a Feature2 ItemDetailActivity.class
ya que no dependen entre sí). Aquí está el ejemplo de código proporcionado por Google
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://example.com/itemdetail")); intent.setPackage(getPackageName()); intent.addCategory(Intent.CATEGORY_BROWSABLE); startActivity(intent);
Ahora la parte que falta es que en el AndroidManifest
de Feature2 debes declarar que ItemDetailActivity
está escuchando el enlace https://example.com/itemdetail
. Aquí está el ejemplo de código pertinente de Google
<activity android:name=".ItemDetailActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:host="example.com" /> <!-- IMPORTANT --> <data android:pathPrefix="/itemdetail"/> </intent-filter> <meta-data android:name="default-url" android:value="https://www.example.com/itemdetail" /> </activity>
Para más información, lea en Enlaces de activos digitales , así como enlaces profundos generales
- Servicio de accesibilidad deshabilitado en cada ejecución de depuración
- ¿Cómo mostrar algún valor en la barra de búsqueda por defecto?