MODULE_UNAVAILABLE Android 中的动态模块错误
MODULE_UNAVAILABLE Error in Dynamic Module in Android
最近在 2018 年,Google 宣布了 Android 中名为 Dynamic Feature Module
的新功能
我尝试了这个 link http://www.tellmehow.co/know-android-dynamic-delivery-module/#
的相同功能
在我的项目中,我得到了应用程序模块 app 和 bigbazaar 的动态模块,
我正在使用以下方法在运行时下载动态方法。
private void downloadDynamicModule() {
try {
SplitInstallManager splitInstallManager =
SplitInstallManagerFactory.create(this);
SplitInstallRequest request =
SplitInstallRequest
.newBuilder()
.addModule("bigbazaar")
.build();
SplitInstallStateUpdatedListener listener = new SplitInstallStateUpdatedListener() {
@Override
public void onStateUpdate(SplitInstallSessionState splitInstallSessionState) {
if (splitInstallSessionState.sessionId() == mySessionId) {
switch (splitInstallSessionState.status()) {
case SplitInstallSessionStatus.INSTALLED:
Toast.makeText(MainActivity.this,
"Dynamic Module downloaded", Toast.LENGTH_SHORT).show();
cmdBigBazaar.setEnabled(true);
break;
}
}
}
};
splitInstallManager.registerListener(listener);
splitInstallManager.startInstall(request)
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
switch (((SplitInstallException) e).getErrorCode()) {
case SplitInstallErrorCode.MODULE_UNAVAILABLE:
Toast.makeText(MainActivity.this, "MODULE_UNAVAILABLE", Toast.LENGTH_SHORT).show();
}
}
})
.addOnSuccessListener(new OnSuccessListener<Integer>() {
@Override
public void onSuccess(Integer sessionId) {
mySessionId = sessionId;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
根据给定的 link 和其他 bolg,我发现我们可以通过 Google Play Store 测试此功能,最后使用名为 "bundletool"[=17= 的工具]
我还按照示例 link 中的建议更改了我的 运行 配置。
我还在动态功能模块的 AndroidManifest.xml 文件中定义了以下属性,
<dist:module
dist:onDemand="true"
dist:instant="false"
dist:title="@string/title_bigbazaar">
<dist:fusing dist:include="false" />
</dist:module>
错误日志,
06-05 10:43:55.452 17566-17566/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallListenerRegistry : registerListener
06-05 10:43:55.453 17566-17566/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : startInstall([dynamicmodule],[])
06-05 10:43:55.463 17566-18219/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : Initiate binding to the service.
06-05 10:43:55.504 17566-17566/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : ServiceConnectionImpl.onServiceConnected(ComponentInfo{com.android.vending/com.google.android.finsky.splitinstallservice.SplitInstallService})
06-05 10:43:55.505 17566-18219/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : linkToDeath
06-05 10:43:56.386 17566-17582/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : onError(-2)
06-05 10:43:56.387 17566-18219/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : Unbind from service.
06-05 10:43:56.387 17566-17566/com.dynamic D/MainActivity: Exception: com.google.android.play.core.splitinstall.SplitInstallException: Split Install Error: -2
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: com.google.android.play.core.splitinstall.SplitInstallException: Split Install Error: -2
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: at com.google.android.play.core.splitinstall.ag.e(Unknown Source)
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: at com.google.android.play.core.internal.bg.a(Unknown Source)
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: at com.google.android.play.core.internal.j.onTransact(Unknown Source)
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: at android.os.Binder.execTransact(Binder.java:453)
问题
我尝试了很多方法,但每次我点击下载按钮下载动态模块时,它都会给我错误代码-2,即"MUDULE_UNAVAILABLE"。
如何解决这个错误?
您无法使用 bundletool 测试按需模块交付。
(阅读本文最后的注释:https://proandroiddev.com/dynamic-feature-module-android-ondemand-module-android-app-bundle-ea0d872b32d)
您应该改为将捆绑包上传到内部应用共享(或其他一些测试轨道),通过 link 将其共享到您的设备,然后测试按需交付。
最近在 2018 年,Google 宣布了 Android 中名为 Dynamic Feature Module
的新功能我尝试了这个 link http://www.tellmehow.co/know-android-dynamic-delivery-module/#
的相同功能在我的项目中,我得到了应用程序模块 app 和 bigbazaar 的动态模块,
我正在使用以下方法在运行时下载动态方法。
private void downloadDynamicModule() {
try {
SplitInstallManager splitInstallManager =
SplitInstallManagerFactory.create(this);
SplitInstallRequest request =
SplitInstallRequest
.newBuilder()
.addModule("bigbazaar")
.build();
SplitInstallStateUpdatedListener listener = new SplitInstallStateUpdatedListener() {
@Override
public void onStateUpdate(SplitInstallSessionState splitInstallSessionState) {
if (splitInstallSessionState.sessionId() == mySessionId) {
switch (splitInstallSessionState.status()) {
case SplitInstallSessionStatus.INSTALLED:
Toast.makeText(MainActivity.this,
"Dynamic Module downloaded", Toast.LENGTH_SHORT).show();
cmdBigBazaar.setEnabled(true);
break;
}
}
}
};
splitInstallManager.registerListener(listener);
splitInstallManager.startInstall(request)
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
switch (((SplitInstallException) e).getErrorCode()) {
case SplitInstallErrorCode.MODULE_UNAVAILABLE:
Toast.makeText(MainActivity.this, "MODULE_UNAVAILABLE", Toast.LENGTH_SHORT).show();
}
}
})
.addOnSuccessListener(new OnSuccessListener<Integer>() {
@Override
public void onSuccess(Integer sessionId) {
mySessionId = sessionId;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
根据给定的 link 和其他 bolg,我发现我们可以通过 Google Play Store 测试此功能,最后使用名为 "bundletool"[=17= 的工具]
我还按照示例 link 中的建议更改了我的 运行 配置。
我还在动态功能模块的 AndroidManifest.xml 文件中定义了以下属性,
<dist:module
dist:onDemand="true"
dist:instant="false"
dist:title="@string/title_bigbazaar">
<dist:fusing dist:include="false" />
</dist:module>
错误日志,
06-05 10:43:55.452 17566-17566/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallListenerRegistry : registerListener
06-05 10:43:55.453 17566-17566/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : startInstall([dynamicmodule],[])
06-05 10:43:55.463 17566-18219/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : Initiate binding to the service.
06-05 10:43:55.504 17566-17566/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : ServiceConnectionImpl.onServiceConnected(ComponentInfo{com.android.vending/com.google.android.finsky.splitinstallservice.SplitInstallService})
06-05 10:43:55.505 17566-18219/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : linkToDeath
06-05 10:43:56.386 17566-17582/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : onError(-2)
06-05 10:43:56.387 17566-18219/com.dynamic I/PlayCore: UID: [11746] PID: [17566] SplitInstallService : Unbind from service.
06-05 10:43:56.387 17566-17566/com.dynamic D/MainActivity: Exception: com.google.android.play.core.splitinstall.SplitInstallException: Split Install Error: -2
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: com.google.android.play.core.splitinstall.SplitInstallException: Split Install Error: -2
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: at com.google.android.play.core.splitinstall.ag.e(Unknown Source)
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: at com.google.android.play.core.internal.bg.a(Unknown Source)
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: at com.google.android.play.core.internal.j.onTransact(Unknown Source)
06-05 10:43:56.387 17566-17566/com.dynamic W/System.err: at android.os.Binder.execTransact(Binder.java:453)
问题
我尝试了很多方法,但每次我点击下载按钮下载动态模块时,它都会给我错误代码-2,即"MUDULE_UNAVAILABLE"。
如何解决这个错误?
您无法使用 bundletool 测试按需模块交付。 (阅读本文最后的注释:https://proandroiddev.com/dynamic-feature-module-android-ondemand-module-android-app-bundle-ea0d872b32d)
您应该改为将捆绑包上传到内部应用共享(或其他一些测试轨道),通过 link 将其共享到您的设备,然后测试按需交付。