抱歉,该网页目前还不存在中文版本,请继续浏览其他网页!

下载模式

下载模式为缩小APK的大小提供了另一种与共享模式相似的解决方案。你的应用仍然绑定仅包含Crosswalk API层的xwalk_shared_library。当应用第一次在客户端设备上运行时,后台将会从你规定好的服务器上下载Crosswalk核心库和资源。与共享模式相比,你的应用可以独享Crosswalk运行时,因此你便可以控制运行时的生命周期。Crosswalk运行时可以不需要用户交互,在后台完成下载。

使用嵌入式API完成下载模式

使用XWalkInitializer/XWalkUpdater初始化Crosswalk

下文中的代码展示了在应用初始化过程中,如何使用XWalkUpdater类来下载运行时。

public class XWalkDownloadActivity extends Activity
        implements XWalkInitializer.XWalkInitListener, 
        XWalkUpdater.XWalkBackgroundUpdateListener {

    XWalkInitializer mXWalkInitializer;
    XWalkUpdater mXWalkUpdater;
    XWalkView mXWalkView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mXWalkInitializer = new XWalkInitializer(this, this);
        mXWalkInitializer.initAsync();

        setContentView(R.layout.activity_xwalkview);

        mXWalkView = (XWalkView) findViewById(R.id.xwalkview);
        ....
    }

    @Override
    protected void onResume() {
        super.onResume();
        mXWalkInitializer.initAsync();
    }

    @Override
    public void onXWalkInitStarted() {
    }

    @Override
    public void onXWalkInitCancelled() {
        finish();
    }

    @Override
    public void onXWalkInitFailed() {
        // Initialization failed. Trigger the Crosswalk runtime download
        if (mXWalkUpdater == null) {
            mXWalkUpdater = new XWalkUpdater(this, this);
        }
        mXWalkUpdater.updateXWalkRuntime();
    }

    @Override
    public void onXWalkInitCompleted() {
        // Initialization successfully, ready to invoke any XWalk embedded API
        mXWalkView.load("file:///android_asset/create_window_1.html", null);
    }

    @Override
    public void onXWalkUpdateStarted() {
    }

    @Override
    public void onXWalkUpdateProgress(int percentage) {
        Log.d(TAG, "XWalkUpdate progress: " + percentage);
    }

    @Override
    public void onXWalkUpdateCancelled() {
        finish();
    }

    @Override
    public void onXWalkUpdateFailed() {
        finish();
    }

    @Override
    public void onXWalkUpdateCompleted() {
        // Crosswalk Runtime update finished, re-init again.
        mXWalkInitializer.initAsync();
    }
    ...

配置AndroidManifest.xml

规定Crosswalk运行时APK的下载链接

<meta-data android:name="xwalk_apk_url" 
           android:value="https:// [URL of your server] /XWalkRuntimeLib.apk" />

注意当请求被发送到服务器端时,描述设备CPU架构的值将会被附加("?arch=<cpu arch> ")。"cpu arch"与adb shell getprop ro.product.cpu_abi的返回值相同,参见下表:

设备CPU架构"cpu arch"的值
IA 32-bitx86
IA 64-bitx86_64
ARM 32-bitarmeabi-v7a
ARM 64-bitarm64-v8a

使用下载模式

<meta-data android:name="xwalk_enable_download_mode" android:value="enable" />

部署

在Crosswalk运行时APK从服务器端下载完成后,需要进行一个签名检测来保证它的完整性。签名检测要求签署Crosswalk运行时APK的关键字与用来签署你的应用的关键字相同。你可以通过在AndroidManifest.xml文件中将xwalk_verify设置为disable来取消部署阶段的签名检测:

<meta-data android:name="xwalk_verify" android:value="disable" />

通常,一个Crosswalk运行时APK(XWalkRuntimeLib.apk)大小约为为~28MB。我们也提供一个大小约为~18MB的LZMA压缩版的运行时APK。虽然压缩后的APK可以节省带宽,但是当应用第一次启动时,APK必须被解压。仅在第一次启动时执行。

Crosswalk运行时更新

一个使用下载模式的Crosswalk应用必须使用服务器端相同版本的Crosswalk运行时APK进行编译。特别是你的应用使用的xwalk_shared_library和服务器端XWalkRuntimeLib.apk (或者XWalkRuntimeLibLzma.apk)必须来自同一版本。因此,无论你何时在应用商店更新你的应用,你也必须更新你服务器的运行时APK。如果你客户端设备上的应用更新到了一个新版本,你的应用将尝试重新下载与新版本匹配的运行时,即使它已经下载过之前的版本。