浅谈Android系统编译apk后so文件在dlopen时出现linker权限问题

一、概述

由于技术能力有限,本文的部分观点可能描述的并非准确,欢迎指正

在早期Android系统源码编译环境中,我们想要编译一个apk需要将java源码,资源文件等同时放在一个工程文件夹中,并且配置好相应的mk文件后再通过mmm命令触发jack工具链进行对工程源码的编译。随着团队的扩大以及各个项目的独立,我们开始尝试将独立项目的apk预置到Android系统源码中,让系统只需要对apk文件进行重新打包即可,无需再将java源码上传到系统中,减小了独立项目和系统之间的关联,让独立项目更加快速的迭代和更独立的发展与管理。

由于apk从系统中独立了出来,与此同时也给apk增加了更多的三方应用库。而在众多的三方库中有不少的三方库都有着自己的so文件。当apk在系统中重新被编译时会对so文件重新打包并放入system/lib目录中,由此引发了so文件内在做dlopen时出现的权限问题。

二、问题描述

  • 在系统中内置一个名为Browser的apk,编译整个Android系统后输入机器中,运行程序发现部分功能丢失,并出现了如下异常:
04-06 12:48:46.004 7821-7821/com.android.browser E/linker: library "/system/app/Browser/lib/arm/libXXwebview.so" ("/system/lib/libXXwebview.so") needed or dlopened by "/system/lib/libnativeloader.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/system/app/Browser/lib/arm", permitted_paths="/data:/mnt/expand"]
04-06 12:48:46.005 7821-7821/com.android.browser E/cr_LibraryLoader: Unable to load library: qihoowebview
04-06 12:48:46.005 7821-7821/com.android.browser W/System.err: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
        at com.qihoo.webkit.WebViewFactory.getProvider(WebViewFactory.java:95)
        at com.qihoo.webkit.internal.QhAdapter$QhWebViewInitializationController.getInstance(QhAdapter.java:119)
        at com.qihoo.webkit.internal.QhAdapter.useSyeWebView(QhAdapter.java:311)
        at com.qihoo.webkit.CookieManager.getInstance(CookieManager.java:41)
        at com.meitu.mobile.browser.lib.webkit.g.a(MtCookieManager.java:26)
        at com.android.browser.o.am(BrowserSettings.java:398)
        at com.android.browser.o.an(BrowserSettings.java:408)
        at com.android.browser.o.onSharedPreferenceChanged(BrowserSettings.java:426)
        at android.app.SharedPreferencesImpl$EditorImpl.notifyListeners(SharedPreferencesImpl.java:561)
04-06 12:48:46.006 7821-7821/com.android.browser W/System.err:     at android.app.SharedPreferencesImpl$EditorImpl.-wrap0(Unknown Source:0)
        at android.app.SharedPreferencesImpl$EditorImpl$3.run(SharedPreferencesImpl.java:569)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:171)
        at android.app.ActivityThread.main(ActivityThread.java:6611)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
    Caused by: java.lang.RuntimeException: Cannot load WebView
        at org.chromium.android_webview.AwBrowserProcess.loadLibrary(AwBrowserProcess.java:72)
        at com.qihoo.webview.chromium.WebViewChromiumFactoryProvider.a(WebViewChromiumFactoryProvider.java:307)
        at com.qihoo.webview.chromium.WebViewChromiumFactoryProvider.<init>(WebViewChromiumFactoryProvider.java:226)
     ... 20 more
    Caused by: org.chromium.base.library_loader.ProcessInitException
        at org.chromium.base.library_loader.LibraryLoader.loadAlreadyLocked(LibraryLoader.java
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值