解决 Chrome 预装运行报错 crashing because cannot load libchrome.so

82 阅读1分钟

问题描述

将 Chrome 预装到 system/app 目录下,打开 Chrome 直接闪退了,直觉告诉我应该是少so库导致的

将Chrome直接install上去,再次打开 Chrome 正常进入,将 data/data/ Chrome 目录拷贝出来,

找到其中需要的so库

错误日志




com.android.chrome I/cr_Linker: Using linker: org.chromium.base.library_loader.LegacyLinker

com.android.chrome I/cr_LibraryLoader: Loading chrome

com.android.chrome I/DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:0

com.android.chrome E/GoogleCertificates: Failed to get Google certificates from remote

    tw: No acceptable module found. Local version is 0 and remote version is 0.

        at zw.a(PG:29)

        at dw.b(PG:6)

        at dw.a(PG:6)

        at ur.a(PG:23)

        at el.a(PG:6)

        at sA0.a(PG:3)

        at Sm.e(PG:3)

        at Sm.b(PG:1)

        at org.chromium.components.signin.AccountManagerFacade.d(PG:2)

        at l42.a(PG:3)

        at H40.call(PG:4)

        at java.util.concurrent.FutureTask.run(FutureTask.java:266)

        at X40.run(PG:1)

        at e50.g(PG:11)

        at d50.run(Unknown Source:2)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)

        at P40.run(PG:2)

        at java.lang.Thread.run(Thread.java:764)

com.android.chrome W/GooglePlayServicesUtil: Google Play Store is missing.

 W/Layer: [Splash Screen com.android.chrome#0] opaque layer with plane alpha:0.86 cannot be handled by hwcomposer

 W/Layer: [Splash Screen com.android.chrome#0] opaque layer with plane alpha:0.94 cannot be handled by hwcomposer

com.android.chrome E/cr_LegacyLinker: Unable to load library: libchrome.so

com.android.chrome W/cr_LibraryLoader: Failed to load native library with shared RELRO, retrying without

com.android.chrome E/cr_LegacyLinker: Unable to load library: libchrome.so

com.android.chrome I/SurfaceFactory: [static] sSurfaceFactory = com.mediatek.view.impl.SurfaceFactoryImpl@228b644

com.android.chrome E/cr_CompositorSurfaceMgr: Transitioning to surface with format : -1



    --------- beginning of crash

com.android.chrome E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.android.chrome, PID: 2445

    c30: errorCode=4

        at xT0.b(PG:8)

        at cU0.a(PG:3)

        at rT0.a(PG:18)

        at nT0.run(PG:2)

        at android.os.Handler.handleCallback(Handler.java:790)

        at android.os.Handler.dispatchMessage(Handler.java:99)

        at android.os.Looper.loop(Looper.java:164)

        at android.app.ActivityThread.main(ActivityThread.java:6523)

        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:857)



解决办法

根据拷贝出的Chrome文件,so库路径为 lib/arm, 在编译的Android.mk目录下,新建 lib/arm ,

将对应的so拷贝进去,新建 copy.sh


#!/bin/bash

echo -e "SO_PATH=${1}"
echo -e "OUT_PACKAGE_PATH=${2}"

echo -e "start cp ${1} so..."



currentPath=$(pwd)/${1}
destinationPath=${OUT}/${2}/lib

echo -e "currentPath=${currentPath}"
echo -e "destinationPath=${destinationPath}"

if [ ! -d "${destinationPath}" ]; then
    echo "mkdie destinationPath"
    mkdir -p ${destinationPath}
fi


cp -f -r $currentPath $destinationPath 

echo -e "\n copy.sh make done...."

在 Android.mk 中调用执行 copy.sh

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Chrome
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

$(info ${LOCAL_PATH})
$(info ${TARGET_OUT})

SO_PATH := $(LOCAL_PATH)/lib/arm
OUT_PACKAGE_PATH := system/app/$(LOCAL_MODULE)
__PRODUCT_COPY_SO = $(shell  ${LOCAL_PATH}/copy.sh  ${SO_PATH} ${OUT_PACKAGE_PATH})
$(info ${__PRODUCT_COPY_SO})



参考文章

Android chrome浏览器的定制

Chrome crashing because cannot load libchrome.so #21