Ошибка раздельной установки Android (-2): Ошибка Module_UnavailableJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка раздельной установки Android (-2): Ошибка Module_Unavailable

Сообщение Anonymous »

Я пытаюсь реализовать функцию доставки по требованию в своем приложении для Android. Сейчас я работаю над примерами, чтобы понять, как это работает, но когда я пытаюсь установить динамический модуль, появляется сообщение об ошибке «Ошибка раздельной установки (-2): запрошенный модуль недоступен (для этого пользователя/устройства, для установленного apk (https://developer.android.com/reference ... NAVAILABLE)"
Я видел много примеров, а также следил за документацией Google по раздельной установке, а также видел много вопросов и ответов по StackOverflow, но не могу найти решения.
Мой код
MainActivity.java(базовое приложение):

Код: Выделить всё

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

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;
import com.google.android.play.core.tasks.OnFailureListener;
import com.google.android.play.core.tasks.OnSuccessListener;

import java.io.File;

public class MainActivity extends AppCompatActivity {

private Button download;

private int mySessionId;

private static final String TAG = "MainActivity";

private SplitInstallManager splitInstallManager;

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

download = findViewById(R.id.download);

splitInstallManager = SplitInstallManagerFactory.create(getApplicationContext());

download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
downloadDynamicModule();
}
});

}

private void downloadDynamicModule() {

SplitInstallRequest request = SplitInstallRequest.newBuilder().addModule("dynamic").build();

SplitInstallStateUpdatedListener listener = new SplitInstallStateUpdatedListener() {
@Override
public void onStateUpdate(SplitInstallSessionState splitInstallSessionState) {
if(splitInstallSessionState.sessionId() == mySessionId) {
switch (splitInstallSessionState.status()) {
case SplitInstallSessionStatus.DOWNLOADING:
Toast.makeText(MainActivity.this, "Dynamic Module downloading", Toast.LENGTH_SHORT).show();
// Update progress bar.
break;
case SplitInstallSessionStatus.INSTALLED:
Log.d(TAG, "Dynamic Module downloaded");
Toast.makeText(MainActivity.this, "Dynamic Module downloaded", Toast.LENGTH_SHORT).show();
break;
}
}
else{
Toast.makeText(MainActivity.this, "Session Not Created", Toast.LENGTH_SHORT).show();
}
}
};

splitInstallManager.registerListener(listener);

splitInstallManager.startInstall(request).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Toast.makeText(MainActivity.this, "Failed to Install "+e, Toast.LENGTH_SHORT).show();
Log.d(TAG, "ExceptionV: " + e);
}
})
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Integer sessionId) {
mySessionId = sessionId;
Toast.makeText(MainActivity.this, "Success"+sessionId, Toast.LENGTH_SHORT).show();
}
});
}
}
AndroidManifest (базовое приложение): Gradle (базовое приложение):

Код: Выделить всё

plugins {
id 'com.android.application'
}

android {
compileSdkVersion 29

defaultConfig {
applicationId "com.package.dynamicfeaturemoduleexample"
minSdkVersion 21
targetSdkVersion 29
versionCode 19
versionName '2.9'

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

bundle {
density {
// Different APKs are generated for devices with different screen densities; true by default.
enableSplit true
}
abi {
// Different APKs are generated for devices with different CPU architectures; true by default.
enableSplit true
}
language {
// This is disabled so that the App Bundle does NOT split the APK for each language.
// We're gonna use the same APK for all languages.
enableSplit false
}
}
dynamicFeatures = [':dynamic', ':dynamicfeature', ':newfeature']
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.google.android.play:core:1.9.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
DynamicActivity.java(Динамическая функция):

Код: Выделить всё

import android.app.Activity;

import android.os.Bundle;

public class DynamicActivity extends Activity {

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

}
AndoridManifest (динамическая функция): Gradle (динамическая функция):

Код: Выделить всё

apply plugin: 'com.android.dynamic-feature'

android {
compileSdkVersion 29

defaultConfig {
applicationId "com.package.dynamic"
minSdkVersion 21
targetSdkVersion 29
versionCode 16
versionName '2.6'

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles 'proguard-rules-dynamic-features.pro'
}
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(":app")
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
implementation 'com.google.android.play:core:1.9.1@aar'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
androidTestImplementation 'androidx.annotation:annotation:1.1.0'
}
Изображение

Я изменил конфигурацию запуска на «Apk из пакета приложений» и тестирую приложение через систему внутреннего тестирования, но оно не работает.

Подробнее здесь: https://stackoverflow.com/questions/665 ... able-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»