Android 11 WebView无法加载libwebviewchromium.so

news/2024/11/22 22:20:37/

概述

Android WebView 是 Google 提供的一个预安装系统组件,用以支持 Android 应用显示网页内容。
       Android WebView 是 Google 提供的一个预安装系统组件,用以支持 Android 应用显示网页内容。

       如果您希望在客户端应用中提供 Web 应用(或只是网页),则可以使用 WebView 执行该操作。WebView 类是 Android 的 View 类的扩展,可让您将网页显示为 Activity 布局的一部分。它不会包含功能全面的网络浏览器的任何功能,例如导航控件或地址栏。WebView 默认只显示网页。

使用 WebView 非常有用的一种常见情形是,您希望在应用中提供可能需要更新的信息,例如最终用户协议或用户指南。在 Android 应用中,您可以创建一个包含 WebView 的 Activity,然后使用它来显示在线托管的文档。

另一种 WebView 可能会有所帮助的情形是,如果您的应用向用户提供始终需要互联网连接才能检索数据的数据(例如电子邮件)。在这种情况下,您可能会发现相比于执行网络请求,然后解析数据并在 Android 布局中呈现数据,在 Android 应用中编译 WebView 以显示包含所有用户数据的网页更加轻松。您可以改为设计一个专为 Android 设备定制的网页,然后在加载该网页的 Android 应用中实现 WebView。
________________________From Android

    在测试RK3566 Android 11功能的时候,碰到一个奇怪的问题: 第三方浏览器APP调用系统WebView出错了。测试中用的是Via浏览器,问题表现威:白屏,UI卡死操作一会出现ANR。

问题

从logcat中看到的log:

2023-04-23 16:12:46.733  1907-1907  WebViewFactory     mark.via              I  Loading com.android.webview version 83.0.4103.120 (code 410412053)
2023-04-23 16:12:46.735   176-176   HWC2               surfaceflinger        E  getRequests: invalid layer 0 found on display 0
2023-04-23 16:12:46.742  1907-1907  mark.via           mark.via              I  The ClassLoaderContext is a special shared library.
2023-04-23 16:12:46.744  1907-1907  nativeloader       mark.via              D  classloader namespace configured for unbundled product apk. library_path=/product/app/webview/lib/arm64:/product/app/webview/webview.apk!/lib/arm64-v8a:/product/lib64:/system/product/lib64
2023-04-23 16:12:46.747  1907-1907  webviewc...mloader mark.via              E  Failed to open relro file /data/misc/shared_relro/libwebviewchromium64.relro: No such file or directory
2023-04-23 16:12:46.747  1907-1907  WebViewL...yLoader mark.via              W  failed to load with relro file, proceeding without2023-04-23 16:12:46.775  1907-1907  AndroidRuntime     mark.via              E  FATAL EXCEPTION: mainCaused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libwebviewchromium.so" not foundat java.lang.Runtime.loadLibrary0(Runtime.java:1087)at java.lang.Runtime.loadLibrary0(Runtime.java:1008)at java.lang.System.loadLibrary(System.java:1664)at tt.g(chromium-SystemWebView.apk-default-410412053:14)at tt.i(chromium-SystemWebView.apk-default-410412053:5) at org.chromium.android_webview.AwBrowserProcess.i(chromium-SystemWebView.apk-default-410412053:9) at com.android.webview.chromium.WebViewChromiumFactoryProvider.f(chromium-SystemWebView.apk-default-410412053:68) at com.android.webview.chromium.WebViewChromiumFactoryProvider.<init>(chromium-SystemWebView.apk-default-410412053:12) at com.android.webview.chromium.WebViewChromiumFactoryProviderForR.<init>(chromium-SystemWebView.apk-default-410412053:1) at com.android.webview.chromium.WebViewChromiumFactoryProviderForR.create(chromium-SystemWebView.apk-default-410412053:1) at java.lang.reflect.Method.invoke(Native Method) at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:266) at android.webkit.WebSettings.getDefaultUserAgent(WebSettings.java:1355) at mark.via.o.e.a.b(Unknown Source:221) at mark.via.l.p3.N1(Unknown Source:36) at androidx.fragment.app.Fragment.m2(Unknown Source:4) at androidx.fragment.app.t.f(Unknown Source:271) at androidx.fragment.app.t.m(Unknown Source:124) at androidx.fragment.app.FragmentManager.a0(Unknown Source:230) at androidx.fragment.app.FragmentManager.c1(Unknown Source:91) at androidx.fragment.app.FragmentManager.X(Unknown Source:21) at androidx.fragment.app.FragmentManager.P(Unknown Source:38) at androidx.fragment.app.FragmentManager.u(Unknown Source:11) at androidx.fragment.app.k.c(Unknown Source:4) at androidx.fragment.app.g.onStart(Unknown Source:20) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435) at android.app.Activity.performStart(Activity.java:8046) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3457) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7664) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) ```

分析LOG前需要先了解一下RELRO参考Android WebView加载Chromium动态库的过程分析
在这里插入图片描述

WebViewFactory WebViewLibraryLoader LocalServices ActivityManagerInternal RelroFileCreator loader.cpp onWebViewProviderChanged createRelros createRelroFile getService startIsolatedProcess main nativeCreateRelroFile CreateRelroFile DoCreateRelroFile WebViewFactory WebViewLibraryLoader LocalServices ActivityManagerInternal RelroFileCreator loader.cpp

frameworks/base/core/java/android/webkit/WebViewLibraryLoader.java

    private static class RelroFileCreator {// Called in an unprivileged child process to create the relro file.public static void main(String[] args) {boolean result = false;boolean is64Bit = VMRuntime.getRuntime().is64Bit();try {if (args.length != 2 || args[0] == null || args[1] == null) {Log.e(LOGTAG, "Invalid RelroFileCreator args: " + Arrays.toString(args));return;}String packageName = args[0];String libraryFileName = args[1];Log.v(LOGTAG, "RelroFileCreator (64bit = " + is64Bit + "), package: "+ packageName + " library: " + libraryFileName);if (!sAddressSpaceReserved) {Log.e(LOGTAG, "can't create relro file; address space not reserved");return;}LoadedApk apk = ActivityThread.currentActivityThread().getPackageInfo(packageName,null,Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);result = nativeCreateRelroFile(libraryFileName,is64Bit ? CHROMIUM_WEBVIEW_NATIVE_RELRO_64 :CHROMIUM_WEBVIEW_NATIVE_RELRO_32,apk.getClassLoader());if (result && DEBUG) Log.v(LOGTAG, "created relro file");} finally {// We must do our best to always notify the update service, even if something fails.try {WebViewFactory.getUpdateServiceUnchecked().notifyRelroCreationCompleted();} catch (RemoteException e) {Log.e(LOGTAG, "error notifying update service", e);}if (!result) Log.e(LOGTAG, "failed to create relro file");// Must explicitly exit or else this process will just sit around after we return.System.exit(0);}}}

frameworks/base/native/webview/loader/loader.cpp

ALOGE("Failed to open relro file %s: %s", relro, strerror(errno));
jboolean DoCreateRelroFile(JNIEnv* env, const char* lib, const char* relro,if (handle == NULL) {ALOGE("Failed to load library %s: %s", lib, dlerror());unlink(relro_tmp);return JNI_FALSE;}
}
Failed to load library libwebviewchromium.so: dlopen failed: library "libwebviewchromium.so" not found
Failed to open relro file /data/misc/shared_relro/libwebviewchromium64.relro: No such file or directory

art/libnativeloader/library_namespaces.cpp

ALOGD("classloader namespace configured for unbundled %s apk. library_path=%s",//对应LOG
//classloader namespace configured for unbundled product apk. library_path=/product/app/webview/lib/arm64:/product/app/webview/webview.apk!/lib/arm64-v8a:/product/lib64:/system/product/lib64

基本定位到webview的库加载问题后,排除第三方APP问题, 重启看下webview的相关log:

2023-04-24 11:06:15.580   446-472   SystemConfig       system_process        I  Reading permissions from /system/etc/permissions/android.software.webview.xml
2023-04-24 11:06:17.733   446-446   SystemServerTiming system_process        I  StartWebViewUpdateService
2023-04-24 11:06:17.733   446-446   SystemSe...Manager system_process        I  Starting com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:17.736   446-446   SystemServerTiming system_process        D  StartWebViewUpdateService took to complete: 2ms
2023-04-24 11:06:19.625   446-446   SystemServerTiming system_process        I  OnBootPhase_480_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:19.625   446-446   SystemServerTiming system_process        D  OnBootPhase_480_com.android.server.webkit.WebViewUpdateService took to complete: 0ms
2023-04-24 11:06:19.667   446-446   SystemServerTiming system_process        I  OnBootPhase_500_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:19.667   446-446   SystemServerTiming system_process        D  OnBootPhase_500_com.android.server.webkit.WebViewUpdateService took to complete: 0ms
2023-04-24 11:06:20.023   446-446   SystemServerTiming system_process        I  OnBootPhase_520_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:20.023   446-446   SystemServerTiming system_process        D  OnBootPhase_520_com.android.server.webkit.WebViewUpdateService took to complete: 0ms
2023-04-24 11:06:20.161   446-446   SystemServerTiming system_process        I  OnBootPhase_550_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:20.161   446-446   SystemServerTiming system_process        D  OnBootPhase_550_com.android.server.webkit.WebViewUpdateService took to complete: 0ms
2023-04-24 11:06:20.540   446-511   SystemSe...ngAsync system_process        I  InitThreadPoolExec:WebViewFactoryPreparation
2023-04-24 11:06:20.540   446-511   SystemSe...eadPool system_process        D  Started executing WebViewFactoryPreparation
2023-04-24 11:06:20.540   446-511   SystemServer       system_process        I  WebViewFactoryPreparation
2023-04-24 11:06:20.540   446-511   SystemSe...ngAsync system_process        I  WebViewFactoryPreparation
2023-04-24 11:06:20.556   446-511   SystemSe...ngAsync system_process        D  WebViewFactoryPreparation took to complete: 16ms
2023-04-24 11:06:20.556   446-511   SystemSe...eadPool system_process        D  Finished executing WebViewFactoryPreparation
2023-04-24 11:06:20.556   446-511   SystemSe...ngAsync system_process        D  InitThreadPoolExec:WebViewFactoryPreparation took to complete: 17ms
2023-04-24 11:06:20.694   446-475   ActivityManager    system_process        I  Start proc 678:WebViewLoader-armeabi-v7a/1037 [android.webkit.WebViewLibraryLoader$RelroFileCreator] for null
2023-04-24 11:06:20.768   446-475   ActivityManager    system_process        I  Start proc 692:WebViewLoader-arm64-v8a/1037 [android.webkit.WebViewLibraryLoader$RelroFileCreator] for null
2023-04-24 11:06:20.780   678-678   WebViewL...yLoader pid-678               V  RelroFileCreator (64bit = false), package: com.android.webview library: libwebviewchromium.so
2023-04-24 11:06:20.792   692-692   WebViewL...yLoader pid-692               V  RelroFileCreator (64bit = true), package: com.android.webview library: libwebviewchromium.so
2023-04-24 11:06:20.809   446-446   SystemServerTiming system_process        I  OnBootPhase_600_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:20.809   446-446   SystemServerTiming system_process        D  OnBootPhase_600_com.android.server.webkit.WebViewUpdateService took to complete: 0ms
2023-04-24 11:06:20.837   692-692   WebViewLoader-     pid-692               I  The ClassLoaderContext is a special shared library.
2023-04-24 11:06:20.837   678-678   WebViewLoader-     pid-678               I  The ClassLoaderContext is a special shared library.
2023-04-24 11:06:20.839   692-692   nativeloader       pid-692               D  classloader namespace configured for unbundled product apk. library_path=/product/app/webview/lib/arm64:/product/app/webview/webview.apk!/lib/arm64-v8a:/product/lib64:/system/product/lib64
2023-04-24 11:06:20.839   678-678   nativeloader       pid-678               D  classloader namespace configured for unbundled product apk. library_path=/product/app/webview/lib/arm:/product/app/webview/webview.apk!/lib/armeabi-v7a:/product/lib:/system/product/lib
2023-04-24 11:06:20.857   678-678   webviewc...mloader pid-678               E  Failed to load library libwebviewchromium.so: dlopen failed: library "libwebviewchromium.so" not found
2023-04-24 11:06:20.863   692-692   webviewc...mloader pid-692               E  Failed to load library libwebviewchromium.so: dlopen failed: library "libwebviewchromium.so" not found
2023-04-24 11:06:20.871   678-678   WebViewL...yLoader pid-678               E  failed to create relro file
2023-04-24 11:06:20.874   692-692   WebViewL...yLoader pid-692               E  failed to create relro file
2023-04-24 11:06:20.881   692-692   WebViewLoader-     pid-692               I  System.exit called, status: 0
2023-04-24 11:06:20.886   678-678   WebViewLoader-     pid-678               I  System.exit called, status: 0
2023-04-24 11:06:20.915   758-758   WebViewZygoteInit  pid-758               I  Starting WebViewZygoteInit
2023-04-24 11:06:20.922   446-504   ActivityManager    system_process        I  Process WebViewLoader-armeabi-v7a (pid 678) has died: psvc PER 
2023-04-24 11:06:20.952   758-758   WebViewZygoteInit  pid-758               I  Beginning application preload for com.android.webview
2023-04-24 11:06:20.958   446-728   ActivityManager    system_process        I  Process WebViewLoader-arm64-v8a (pid 692) has died: psvc PER 
2023-04-24 11:06:20.962   758-758   webview_zygote     pid-758               I  The ClassLoaderContext is a special shared library.
2023-04-24 11:06:20.964   758-758   nativeloader       pid-758               D  classloader namespace configured for unbundled product apk. library_path=/product/app/webview/lib/arm:/product/app/webview/webview.apk!/lib/armeabi-v7a:/product/lib:/system/product/lib
2023-04-24 11:06:20.968   758-758   webviewc...mloader pid-758               E  Failed to open relro file /data/misc/shared_relro/libwebviewchromium32.relro: No such file or directory
2023-04-24 11:06:20.968   758-758   WebViewL...yLoader pid-758               W  failed to load with relro file, proceeding without
2023-04-24 11:06:21.004   758-758   WebViewZygoteInit  pid-758               E  Exception while preloading packagejava.lang.reflect.InvocationTargetExceptionat java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.WebViewZygoteInit$WebViewZygoteConnection.doPreload(WebViewZygoteInit.java:126)at com.android.internal.os.WebViewZygoteInit$WebViewZygoteConnection.handlePreloadApp(WebViewZygoteInit.java:79)at com.android.internal.os.ZygoteConnection.processOneCommand(ZygoteConnection.java:181)at com.android.internal.os.ZygoteServer.runSelectLoop(ZygoteServer.java:546)at com.android.internal.os.ChildZygoteInit.runZygoteServer(ChildZygoteInit.java:125)at com.android.internal.os.WebViewZygoteInit.main(WebViewZygoteInit.java:147)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libwebviewchromium.so" not foundat java.lang.Runtime.loadLibrary0(Runtime.java:1087)at java.lang.Runtime.loadLibrary0(Runtime.java:1008)at java.lang.System.loadLibrary(System.java:1664)at com.android.webview.chromium.WebViewChromiumFactoryProvider.preloadInZygote(chromium-SystemWebView.apk-default-410412053:3)at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.WebViewZygoteInit$WebViewZygoteConnection.doPreload(WebViewZygoteInit.java:126) at com.android.internal.os.WebViewZygoteInit$WebViewZygoteConnection.handlePreloadApp(WebViewZygoteInit.java:79) at com.android.internal.os.ZygoteConnection.processOneCommand(ZygoteConnection.java:181) at com.android.internal.os.ZygoteServer.runSelectLoop(ZygoteServer.java:546) at com.android.internal.os.ChildZygoteInit.runZygoteServer(ChildZygoteInit.java:125) at com.android.internal.os.WebViewZygoteInit.main(WebViewZygoteInit.java:147) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
2023-04-24 11:06:21.004   758-758   WebViewZygoteInit  pid-758               I  Application preload done
2023-04-24 11:06:21.006   446-446   SystemServerTiming system_process        I  ssm.onStartUser-0_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:21.006   446-446   SystemServerTiming system_process        D  ssm.onStartUser-0_com.android.server.webkit.WebViewUpdateService took to complete: 0ms
2023-04-24 11:06:21.031   446-446   StorageM...Service system_process        V  Package com.android.webview does not have legacy storage
2023-04-24 11:06:24.986   446-468   Activity...rTiming system_process        I  OnBootPhase_1000_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:24.986   446-468   Activity...rTiming system_process        D  OnBootPhase_1000_com.android.server.webkit.WebViewUpdateService took to complete: 0ms
2023-04-24 11:06:26.235   446-474   SystemSe...ngAsync system_process        I  ssm.onUnlockingUser-0_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:26.235   446-474   SystemSe...ngAsync system_process        D  ssm.onUnlockingUser-0_com.android.server.webkit.WebViewUpdateService took to complete: 0ms
2023-04-24 11:06:26.366   446-474   SystemSe...ngAsync system_process        I  ssm.onUnlockedUser-0_com.android.server.webkit.WebViewUpdateService
2023-04-24 11:06:26.366   446-474   SystemSe...ngAsync system_process        D  ssm.onUnlockedUser-0_com.android.server.webkit.WebViewUpdateService took to complete: 0ms

基本与第三方APP没什么关系, webview的lib库是在开机就加载的.

bionic/linker/linker.cpp 根据经验,先到linker打打LOG

static int open_library_in_zipfile(ZipArchiveCache* zip_archive_cache,const char* const input_path,off64_t* file_offset, std::string* realpath) {std::string normalized_path;if (!normalize_path(input_path, &normalized_path)) {PRINT("open_library_in_zipfile err normallized path");return -1;}const char* const path = normalized_path.c_str();TRACE("Trying zip file open from path \"%s\" -> normalized \"%s\"", input_path, path);// Treat an '!/' separator inside a path as the separator between the name// of the zip file on disk and the subdirectory to search within it.// For example, if path is "foo.zip!/bar/bas/x.so", then we search for// "bar/bas/x.so" within "foo.zip".const char* const separator = strstr(path, kZipFileSeparator);if (separator == nullptr) {PRINT("open_library_in_zipfile err no separator");return -1;}char buf[512];if (strlcpy(buf, path, sizeof(buf)) >= sizeof(buf)) {PRINT("Warning: ignoring very long library path: %s", path);return -1;}buf[separator - path] = '\0';const char* zip_path = buf;const char* file_path = &buf[separator - path + 2];int fd = TEMP_FAILURE_RETRY(open(zip_path, O_RDONLY | O_CLOEXEC));if (fd == -1) {PRINT("open_library_in_zipfile err 0");return -1;}PRINT("open_library_in_zipfile zip_path=%s", zip_path);ZipArchiveHandle handle;if (!zip_archive_cache->get_or_open(zip_path, &handle)) {// invalid zip-file (?)close(fd);PRINT("open_library_in_zipfile err 1");return -1;}ZipEntry entry;if (FindEntry(handle, file_path, &entry) != 0) {// Entry was not found.close(fd);PRINT("open_library_in_zipfile err 2");return -1;}// Check if it is properly storedif (entry.method != kCompressStored || (entry.offset % PAGE_SIZE) != 0) {close(fd);PRINT("open_library_in_zipfile err 3, %d, %d", entry.method != kCompressStored, (entry.offset % PAGE_SIZE) != 0);return -1;}*file_offset = entry.offset;if (realpath_fd(fd, realpath)) {*realpath += separator;} else {if (!is_first_stage_init()) {PRINT("warning: unable to get realpath for the library \"%s\". Will use given path.",normalized_path.c_str());}*realpath = normalized_path;}return fd;
}
linker     mark.via  load_library(ns=(default), task=/product/app/webview/oat/arm64/webview.odex, flags=0x2, search_linked_namespaces=0): calling open_library with realpath=
linker     mark.via  open_library name=/product/app/webview/oat/arm64/webview.odex, ns=(default)
linker     mark.via  load_library taskName=libwebviewchromium.so
linker     mark.via  load_library(ns=vendor-classloader-namespace, task=libwebviewchromium.so, flags=0x2, search_linked_namespaces=1): calling open_library with realpath=
linker     mark.via  open_library name=libwebviewchromium.so, ns=vendor-classloader-namespace
linker     mark.via  open_library_in_zipfile zip_path=/product/app/webview/webview.apk
linker     mark.via  open_library_in_zipfile err 3, 1, 1
linker     mark.via  open_library_at_path /product/app/webview/webview.apk!/lib/arm64-v8a/libwebviewchromium.so FAILED
linker     mark.via  open_library_at_path /product/lib64/libwebviewchromium.so FAILED
linker     mark.via  open_library_at_path /product/lib64/libwebviewchromium.so FAILED

error 3 表明,这两个条件都有问题:entry.method != kCompressStored || (entry.offset % PAGE_SIZE) != 0
看文件:

在这里插入图片描述

rk3568_a11$ tree out/target/product/rk3566_r/product/app/webview/
out/target/product/rk3566_r/product/app/webview/
├── oat
│   ├── arm
│   │   ├── webview.odex
│   │   └── webview.vdex
│   └── arm64
│       ├── webview.odex
│       └── webview.vdex
└── webview.apk
//Failed
linker     pid-664 load_library taskName=libwebviewchromium.so
linker     pid-664 load_library(ns=vendor-classloader-namespace, task=libwebviewchromium.so, flags=0x0, search_linked_namespaces=1): calling open_library with realpath=
linker     pid-664 open_library name=libwebviewchromium.so, ns=vendor-classloader-namespace
linker     pid-664 open_library_in_zipfile zip_path=/product/app/webview/webview.apk
linker     pid-664 open_library_in_zipfile err 3, 1, 1
linker     pid-664 open_library_at_path /product/app/webview/webview.apk!/lib/armeabi-v7a/libwebviewchromium.so FAILED//Success
linker     pid-822 load_library taskName=libwebviewchromium.so
linker     pid-822 load_library(ns=vendor-classloader-namespace, task=libwebviewchromium.so, flags=0x0, search_linked_namespaces=1): calling open_library with realpath=
linker     pid-822 open_library name=libwebviewchromium.so, ns=vendor-classloader-namespace
linker     pid-822 open_library_in_zipfile zip_path=/product/app/webview/webview.apk
linker     pid-822 open_library_at_path /product/app/webview/webview.apk!/lib/armeabi-v7a/libwebviewchromium.so SUCCESS

解决

   非逻辑问题,怀疑webview文件的问题,尝试替换掉webview试试,从另一套代码中拷贝出编译好的webview, PUSH到主板中,问题神奇地消失了。

最终发现是改了编译配置导致生成的webview.apk文件不一致导致(APK的优化对齐相关)。

在修正了文件问题后,对应目录的RELRO存在相应的文件。

rk3566:/ # ll /data/misc/shared_relro/                                                                               
total 5332
-r--r--r-- 1 shared_relro shared_relro 1892352 2023-04-24 15:53 libwebviewchromium32.relro
-r--r--r-- 1 shared_relro shared_relro 3563520 2023-04-24 15:53 libwebviewchromium64.relro

参考

Shared Libraries on Android
Shared Libraries on Android
Android WebView加载Chromium动态库的过程分析
Android系统安全 — 2.0-移动终端栈溢出的保护机制设置
在 WebView 中编译 Web 应用


http://www.ppmy.cn/news/61045.html

相关文章

要么转型升级,要么躺平出局,IT人如何找到理想职场?

‍ ‍某位哲学家曾说&#xff1a;“工作的最高意义在于它应该是人类的仆人&#xff0c;而非主人”&#xff0c;但是在今年的就业环境下&#xff0c;大部分打工人嘴上喊着躺平&#xff0c;身体却很诚实地在行动上打鸡血。 但是卷起来就安全了吗&#xff1f;35岁之前走上管理岗就…

SpringBoot整合Mybatis实现商品评分

前言 当今的电商平台越来越依赖于用户评分&#xff0c;以确定一个商品在市场中的竞争力和口碑&#xff0c;而SpringBoot整合Mybatis-plus是非常适用于这一功能的框架。本文将介绍在SpringBoot应用中整合Mybatis-plus框架&#xff0c;实现对商品进行评分功能的实现过程。同时&a…

Db2 hardcode一个CTE

环境 DB2 v11.5.0.0 CTE &#xff08;Common Table Expression&#xff09; 基本用法 例如&#xff1a; with temp1 as (select * from t1 where c1 > 1) select * from temp1 where c2 < 100可见&#xff0c;定义好CTE之后&#xff0c;就可以当成table一样直接用了…

【python】【质量警告】提升代码质量

在提交代码时遇到了一些警告 &#xff08;没有写知道不能这么干的代码&#xff09;&#xff1a; 使用SQL语句查询时有填入的参数 Possible SQL injection vector through string-based query construction. 通过基于字符串的查询构造可能的SQL注入向量。 谨慎使用exec Use of e…

Spring的第十二阶段(03):Spring实现AOP的简单使用

1、获取拦截方法的返回值和抛的异常信息 获取方法返回的值分为两个步骤&#xff1a; 1、在返回值通知的方法中&#xff0c;追加一个参数 Object result 2、然后在AfterReturning注解中添加参数returning“参数名” 获取方法抛出的异常分为两个步骤&#xff1a; 1、在异常通…

【力扣周赛】第344场周赛

【力扣周赛】第344场周赛 6416&#xff1a;找出不同元素数目差数组题目描述解题思路 6417&#xff1a;频率跟踪器题目描述解题思路 6418&#xff1a;有相同颜色的相邻元素数目题目描述解题思路 6419&#xff1a;使二叉树所有路径值相等的最小代价题目描述解题思路 6416&#xf…

linux【网络编程】之网络基础

linux【网络编程】之网络基础 一、网络协议与协议分层1.1 为什么要分层1.2 OSI七层模型1.3 TCP/IP五层(或四层)模型 二、网络传输流程2.1 了解局域网2.2 同一网段内的两台主机进行文件传输2.3 跨网段的主机的文件传输 三、数据包封装和分用四、网络中的地址管理4.1 IP地址4.2 M…

【Leetcode -383.赎金信 -387.字符串中的第一个唯一字符】

Leetcode Leetcode -383.赎金信Leetcode - 387.字符串中的第一个唯一字符 Leetcode -383.赎金信 题目&#xff1a;给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#x…