5

我尝试在我的应用程序中实现动态功能模块。我在活动中有按钮。当用户单击我检查模块是否已安装。如果不是,我使用 startInstall(request) 开始安装。但我总是去其他州。

代码

    if (manager.installedModules.contains("sample")) {
-----> Always go to this block 
                Toast.makeText(this, "Already Downloaded", Toast.LENGTH_SHORT).show()
                Intent().setClassName(packageName, "com.example.sample.SampleActivity")
                        .also {
                            startActivity(it)
                        }
            } else {
               // Never came to this state
                // Create request to install a feature module by name.
                val request = SplitInstallRequest.newBuilder()
                        .addModule("sample")
                        .build()
                // Load and install the requested feature module.
                manager.startInstall(request)
            }

在我设置的动态功能模块中onDemand="true"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dist="http://schemas.android.com/apk/distribution"
package="com.example.sample">

<dist:module
    dist:onDemand="true"
    dist:title="@string/title_sample">
    <dist:fusing dist:include="true" />
</dist:module>

<application>
    <activity android:name="com.example.sample.SampleActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
        </intent-filter>
    </activity>
</application>

4

3 回答 3

6

目前,测试按需交付实现的唯一方法是将 .aab 上传到 PlayStore。

Android Studio 的标准部署将所有模块部署到连接的设备。

在开发环境中,流程是正确的,模块在部署到设备时已经安装。

至于代码,看一下示例应用程序,特别是MainActivity的下载和监听器实现。

于 2018-11-20T15:42:36.753 回答
3

另一种在本地测试动态功能模块而不将其上传到游戏商店的方法是使用bundle-tool

bundle-tool 使用--local-testing模拟确切环境的标志,并且可以看到功能模块正在下载

./gradlew bundleDebug

bundletool build-apks --overwrite --local-testing --bundle path/to/bundle.aab --output path/to/apkset.apks

bundletool install-apks --apks path/to/apkset.apks

有关详细信息,请参阅以下链接: https ://medium.com/androiddevelopers/local-development-and-testing-with-fakesplitinstallmanager-57083e1840a4

于 2020-09-07T16:06:14.043 回答
-2
在清单中添加 split="dynamic-feature-test"
split="split_name" :定义模块的名称,您的应用在使用 Play 核心库请求按需模块时指定该名称。
于 2018-11-13T11:10:21.847 回答