Integración de módulos dinámicos de funciones de Android de Shubham Agrawal | Octubre de 2020

Así que repasemos cada paso para que podamos configurar el módulo de funciones bajo demanda. Puede configurarlo usando Android Studio en pasos simples y simples.

PASO 1: Haga clic en Archivo> Nuevo> Nuevo módulo del menú.

PASO 2: Escoger Módulo de funciones dinámicas y toque Próximo.

PASO 3: Entra tu Nombre del módulo e ingrese el nombre del paquete como com.example.project.featurename. y toque Próximo.

PASO 4: En las opciones de descarga dentro del módulo, ingrese el nombre del módulo y deje las opciones configuradas restantes como predeterminadas en Android Studio y haga clic en Completar.

PASO 5: Una vez que haya terminado, Android Studio hará su trabajo y Gradle se sincronizará.

PASO 6: Una vez que Gradle haya terminado de sincronizarse, aparecerá el tuyo Propiedades módulo en el panel izquierdo debajo del módulo de aplicación como un nuevo proyecto con su propia carpeta Manifest, Java y res.

PASO 7: Implemente las dependencias de Google Play Core en su solicitud usando el módulo api. Puede utilizar la «api» para las dependencias de Google y utilizarla en su Propiedades módulo. «Api» funciona como una dependencia común, que se utiliza en ambos módulos.

api 'com.google.android.play:core:1.8.2'

PASO 8: Ahora, dentro de tu solicitud manifest, agregue esta línea si no tiene una clase de aplicación.

<application android:name="com.google.android.play.core.splitcompat.SplitCompatApplication"
...
...
</application>

O, Si tiene una clase de aplicación existente, extienda esta clase por SplitCompatApplication y reescribir attachBaseContext () y agregue la línea que agregué al archivo de muestra.

package com.example.app;

import com.google.android.play.core.splitcompat.SplitCompatApplication;

public class App extends SplitCompatApplication {

@Override
public void onCreate() {
super.onCreate();
}

@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
SplitCompat.install(this);
}
}

PASO 9: Descargar ahora Propiedades módulo utilizando el siguiente ejemplo a continuación.

package com.example.app;

import androidx.appcompat.app.AppCompatActivity;
import com.google.android.play.core.splitinstall.SplitInstallManager;
import com.google.android.play.core.splitinstall.SplitInstallManagerFactory;
import com.google.android.play.core.splitinstall.SplitInstallRequest;
import com.google.android.play.core.splitinstall.SplitInstallSessionState;
import com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener;
import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus;

public class MainActivity extends AppCompatActivity {

private SplitInstallManager splitInstallManager;
private int mySessionID;
SplitInstallStateUpdatedListener splitInstallStateUpdatedListener =
state -> {
if (state.sessionId() == mySessionID) {
switch (state.status()) {
case SplitInstallSessionStatus.REQUIRES_USER_CONFIRMATION:
// Large module that has size greater than 10 MB requires user permission
try {
splitInstallManager.startConfirmationDialogForResult(state,
DashboardActivity.this, 110);
} catch (IntentSender.SendIntentException ex) {
// Request failed
}
break;

case SplitInstallSessionStatus.DOWNLOADING:
Log.i(TAG, "Downloading");
// The module is being downloaded
int totalBytes = state.totalBytesToDownload();
int progress = state.bytesDownloaded();
break;

case SplitInstallSessionStatus.INSTALLING:
Log.i(TAG, "Installing");
// The downloaded module is being installed
break;

case SplitInstallSessionStatus.DOWNLOADED:
Log.i(TAG, "Downloaded");
Toast.makeText(this, "Module Downloaded", Toast.LENGTH_SHORT).show();
// The module download is complete
break;

case SplitInstallSessionStatus.INSTALLED:
Log.i(TAG, "Installed");
// Use the below line to call your feature module activity
Toast.makeText(this, "Module Installed", Toast.LENGTH_SHORT).show();

Intent intent = new Intent();
intent.setClassName("com.example.app", "com.example.app.feature.AnotherActivity");
intent.putExtra("id", "12354");
startActivity(intent);
// The module has been installed successfully
break;

case SplitInstallSessionStatus.CANCELED:
Log.i(TAG, "Canceled");
// The user cancelled the download
break;

case SplitInstallSessionStatus.PENDING:
Log.i(TAG, "Pending");
// The installation is deferred
break;

case SplitInstallSessionStatus.FAILED:
Log.i(TAG, "Failed");
// The installation failed
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

splitInstallManager = SplitInstallManagerFactory.create(this);
splitInstallManager.registerListener(splitInstallStateUpdatedListener);

Button btnDownload = findViewById(R.id.btnDownload);
btnDownload.setOnClickListener(v -> onClickDownloadFeatureModule()); // Using JAVA_8

}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
Log.d(TAG, "onActivityResult: ");
if (requestCode == 110) {
if (resultCode == RESULT_OK) {
Log.i(TAG, "onActivityResult: Install Approved ");
}
}
super.onActivityResult(requestCode, resultCode, data);
}

public void onClickDownloadFeatureModule() {
if (!splitInstallManager.getInstalledModules().contains("pdffeature")) {
SplitInstallRequest splitInstallRequest = SplitInstallRequest.newBuilder()
.addModule("feature")
.build();
splitInstallManager.startInstall(splitInstallRequest)
.addOnSuccessListener(result -> this.mySessionID = result)
.addOnFailureListener(e -> Log.i(TAG, "installManager: " + e.toString()));
} else {
Intent intent = new Intent();
intent.setClassName("com.example.app", "com.example.app.feature.AnotherActivity");
intent.putExtra("id", "12354");
startActivity(intent);
}
}

}

NOTA: Si tu Propiedades Si el tamaño del módulo es superior a 10 MB, aparece un cuadro de diálogo de confirmación del usuario que le indica qué está descargando.

Cuadro de diálogo de confirmación de usuario para tamaño> 10 MB

En el ejemplo anterior, una vez Propiedades el módulo se descarga e instala, puede invocar la actividad del módulo de función utilizando Intent.

Intent intent = new Intent();
intent.setClassName("com.example.app", "com.example.app.feature.AnotherActivity");
intent.putExtra("id", "12354");
startActivity(intent);

PASO 10: Ahora dentro de tu Propiedades carpeta del módulo java, cree una actividad como en un módulo de aplicación normal y llámelo usando las llamadas Intent anteriores. Dentro de esta actividad se suprime attachBaseContext ()

@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
SplitCompat.install(this);
}

Y eso es todo … Ha terminado de implementar el módulo de funciones bajo demanda para Android.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *