Android 11 WebView no puede cargar libwebviewchromium.so

descripción general

Android WebView es un componente del sistema preinstalado proporcionado por Google para admitir aplicaciones de Android para mostrar contenido web.
       Android WebView es un componente del sistema preinstalado proporcionado por Google para admitir aplicaciones de Android para mostrar contenido web.

       Si desea servir una aplicación web (o simplemente una página web) en una aplicación cliente, puede usar WebView para hacerlo. La clase WebView es una extensión de la clase View de Android que le permite mostrar páginas web como parte del diseño de una Actividad. No contendrá ninguna de las funciones de un navegador web completo, como controles de navegación o una barra de direcciones. WebView solo muestra páginas web de forma predeterminada.

Una situación común en la que es útil usar WebView es cuando desea proporcionar información en su aplicación que puede necesitar ser actualizada, como un acuerdo de usuario final o una guía del usuario. En una aplicación de Android, puede crear una actividad que contenga una WebView y usarla para mostrar documentos alojados en línea.

Otra situación en la que WebView podría ser útil es si su aplicación proporciona datos al usuario que siempre requiere una conexión a Internet para recuperar los datos (como el correo electrónico). En este caso, puede que le resulte más fácil compilar un WebView en su aplicación de Android para mostrar una página web con todos los datos del usuario que realizar una solicitud de red, luego analizar los datos y representarlos en un diseño de Android. En su lugar, puede diseñar una página web personalizada para dispositivos Android y luego implementar un WebView en la aplicación de Android que carga la página web.
________________________Desde Android

    Al probar la función RK3566 Android 11, encontré un problema extraño: se produjo un error cuando la aplicación del navegador de terceros llamó al sistema WebView. El navegador Via se usa en la prueba y el problema es grave: la pantalla en blanco, la interfaz de usuario se congela y aparecerá ANR después de la operación.

pregunta

El registro visto desde logcat:

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 without

2023-04-23 16:12:46.775  1907-1907  AndroidRuntime     mark.via              E  FATAL EXCEPTION: main
 Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libwebviewchromium.so" not found
 	at 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) ```

Antes de analizar LOG, debe comprender el análisis de proceso de RELRO en referencia a Android WebView cargando la biblioteca dinámica de Chromium
inserte la descripción de la imagen aquí

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

Después de localizar básicamente el problema de carga de la biblioteca de webview, elimine el problema de la aplicación de terceros, reinicie y verifique el registro relevante de webview:

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 package
                                                                                java.lang.reflect.InvocationTargetException
                                                                                    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)
                                                                                Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libwebviewchromium.so" not found
                                                                                    at 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

Básicamente, no tiene nada que ver con aplicaciones de terceros.La biblioteca lib de webview se carga al inicio.

bionic/linker/linker.cpp Según la experiencia, primero vaya al enlazador para escribir 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 stored
  if (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

el error 3 muestra que hay un problema con ambas condiciones: entry.method != kCompressStored || (entry.offset % PAGE_SIZE) != 0
Mire el archivo:

inserte la descripción de la imagen aquí

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

resolver

   Problema no lógico, sospeche del problema del archivo de vista web, intente reemplazar la vista web, copie la vista web compilada de otro conjunto de código, EMPÚJELO en la placa base y el problema desaparecerá mágicamente.

Al final, se encontró que el archivo webview.apk generado era inconsistente debido a cambios en la configuración de la compilación (relacionados con la alineación de optimización del APK).

Después de corregir el problema del archivo, el archivo correspondiente existe en el RELRO del directorio correspondiente.

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

referencia

Bibliotecas compartidas en Android
Bibliotecas compartidas en Android
Análisis del proceso de carga de Android WebView de la biblioteca dinámica de Chromium
Seguridad del sistema Android: mecanismo de protección 2.0 para el desbordamiento de la pila de terminales móviles
Compilación de aplicaciones web en WebView

Supongo que te gusta

Origin blog.csdn.net/ansondroider/article/details/130343948
Recomendado
Clasificación