1 分钟阅读 次阅读

1 设置系统默认 webview

此处参考《Rockchip 浏览器相关问题解答.pdf》

1.1 webview 版本区别

Name PackageName 获取方式 自动更新 1 稳定性
Android WebView com.android.webview Android 自带 最高
Chrome Stable2 com.android.chrome Chrome 自带
Google WebView3 com.google.android.webview 随 GMS 包发布
Custom Webview com.android.webview 自编译

1.2 更改系统指定的 webview 包名

frameworks/base/core/res/res/xml/config_webview_packages.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2015 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<webviewproviders>
    <!-- The default WebView implementation -->
    <webviewprovider description="Android WebView" packageName="com.google.android.webview" availableByDefault="true">
    </webviewprovider>
</webviewproviders>

此处可以指定几个 webview,如下 alt text

  • 系统在开机过程中会自动根据这个配置文件中的顺序来搜索设备中已安装并启用的包信息,找到以后直接返回,例如上面配置中的三个发行版如果都安装并启用了,则默认的包名是 com.android.webview

  • 如果只有一个 webview,保留一个即可。

2 webview 不同的安装位置

2.1 默认位置

external/chromium-webview
├── CleanSpec.mk
├── prebuilt
│ ├── arm
│ │ └── webview.apk
│ ├── arm64
│ │ └── webview.apk
│ ├── x86
│ │ └── webview.apk
│ └── x86_64
│ └── webview.apk
└── README.md

实际上这里还会有个 Android.mk,此处因为需要更换 webview 的安装位置被我删除了

2.2 系统应用位置

如果需要将 webview 做成系统应用,需要修改安装的位置

vendor/rockchip/common/apps/webview
├── Android.mk
├── lib
│ ├── arm
│ │ ├── libcrashpad_handler_trampoline.so
│ │ └── libwebviewchromium.so
│ └── arm64
│ ├── libcrashpad_handler_trampoline.so
│ └── libwebviewchromium.so
└── webview.apk
  • 此处记得将 32 位的库(arm 目录)也加进来,并且在 Android.mk 中不要指定 ABI,否则使用 32 位 webview 库的应用,可能就会闪退,报如下的错误
Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: "/odm/bundled_uninstall_back-app/webview/lib/arm64/libwebviewchromium.so" is 64-bit instead of 32-bit
  • Android.mk 如下
LOCAL_PATH := $(my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := webview
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/bundled_uninstall_back-app
LOCAL_SRC_FILES := $(LOCAL_MODULE)$(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

# LOCAL_JNI_SHARED_LIBRARIES_ABI := arm64

MY_LOCAL_PREBUILT_JNI_LIBS := \
    lib/arm64/libcrashpad_handler_trampoline.so \
    lib/arm64/libwebviewchromium.so \
    lib/arm/libcrashpad_handler_trampoline.so \
    lib/arm/libwebviewchromium.so

MY_APP_LIB_PATH_ARM64 := \
    $(TARGET_OUT_ODM)/bundled_uninstall_back-app/$(LOCAL_MODULE)/lib/arm64-v8a

MY_APP_LIB_PATH_ARM := \
    $(TARGET_OUT_ODM)/bundled_uninstall_back-app/$(LOCAL_MODULE)/lib/armeabi-v7a

LOCAL_POST_INSTALL_CMD := \
    mkdir -p $(MY_APP_LIB_PATH_ARM64); \
    mkdir -p $(MY_APP_LIB_PATH_ARM); \
    cp -f $(LOCAL_PATH)/lib/arm64/* $(MY_APP_LIB_PATH_ARM64)/; \
    cp -f $(LOCAL_PATH)/lib/arm/* $(MY_APP_LIB_PATH_ARM)/

include $(BUILD_PREBUILT)

留下评论