HarmonyOS 鸿蒙Next ArkUI-X 在 Android 设备上无法正确加载 librouter.so

HarmonyOS 鸿蒙Next ArkUI-X 在 Android 设备上无法正确加载 librouter.so

是需要特别的配置吗?

Android adb log 如下:

08-09 23:25:02.699 16091 16091 E NAPI    : [native_module_manager.cpp(GetFileBuffer)] /data/user/0/com.greenshadow.ms/files/arkui-x/systemres/abc/router.abc is not existed.
08-09 23:25:02.699 16091 16091 E NAPI    : [native_module_manager.cpp(FindNativeModuleByDisk)] First attempt: load module failed. dlopen failed: library "/data/app/~~6sJJ01j0T1KL3eCchR8Axg==/com.greenshadow.ms-zR0yQKlpcEVaRYVFqiUGIA==/lib/arm64/librouter.so" not found
08-09 23:25:02.699 16091 16091 E NAPI    : Second attempt: load module failed. dlopen failed: library "/data/user/0/com.greenshadow.ms/files/arkui-x/libs/arm64-v8a/librouter.so" not found
08-09 23:25:02.699 16091 16091 E NAPI    : try to load abc file from /data/user/0/com.greenshadow.ms/files/arkui-x/systemres/abc/router.abc failed
08-09 23:25:02.699 16091 16091 D NAPI    : [native_module_manager.cpp(LoadNativeModule)] load native module failed
08-09 23:25:02.699 16091 16091 I NAPI    : [ark_native_engine.cpp(operator())] First attempt: load module failed. dlopen failed: library "/data/app/~~6sJJ01j0T1KL3eCchR8Axg==/com.greenshadow.ms-zR0yQKlpcEVaRYVFqiUGIA==/lib/arm64/librouter.so" not found
08-09 23:25:02.699 16091 16091 I NAPI    : Second attempt: load module failed. dlopen failed: library "/data/user/0/com.greenshadow.ms/files/arkui-x/libs/arm64-v8a/librouter.so" not found
08-09 23:25:02.699 16091 16091 I NAPI    : try to load abc file from /data/user/0/com.greenshadow.ms/files/arkui-x/systemres/abc/router.abc failed
08-09 23:25:02.701 16091 16091 D ArkCompiler: [default] Throw error: Cannot read property pushUrl of undefined
08-09 23:25:02.703 16091 16091 D ArkCompiler: [default]     at pushUrl (/devcloud/slavespace/usr1/081f8aba80800f0f0fcec015bd66c7e0/harmony_code/codearts_workspace/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsUIContext.js:1078:1)
08-09 23:25:02.703 16091 16091 D ArkCompiler:     at anonymous (entry|entry|1.0.0|src/main/ets/pages/Index.ts:148:1)
08-09 23:25:02.703 16091 16091 E ArkCompiler: [default] [Call:3621] occur exception need return
08-09 23:25:02.703 16091 16091 E ArkCompiler: [default] Pending exception before ExecutePendingJob called, in line:5601, exception details as follows:
08-09 23:25:02.703 16091 16091 E ArkCompiler: [default] TypeError: Cannot read property pushUrl of undefined
08-09 23:25:02.703 16091 16091 E ArkCompiler:     at pushUrl (/devcloud/slavespace/usr1/081f8aba80800f0f0fcec015bd66c7e0/harmony_code/codearts_workspace/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsUIContext.js:1078:1)
08-09 23:25:02.703 16091 16091 E ArkCompiler:     at anonymous (entry|entry|1.0.0|src/main/ets/pages/Index.ts:148:1)

更多关于HarmonyOS 鸿蒙Next ArkUI-X 在 Android 设备上无法正确加载 librouter.so的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

根据楼主错误日志显示,系统尝试从两个路径加载 librouter.so 失败:应用安装目录的 lib/arm64 路径:/data/app/…/lib/arm64/librouter.so;应用私有目录的 arkui-x/libs/arm64-v8a 路径:/data/user/0/…/files/arkui-x/libs/arm64-v8a/librouter.so。同时触发 Cannot read property pushUrl of undefined 异常,说明路由模块没有正确初始化。

试试以下办法:

1 把librouter.so 文件按 Android 标准架构目录存放;在 APK 解压后的 lib/arm64-v8a 目录中看看 librouter.so 是否存在。若缺失,需调整 Gradle 配置:

android {
  sourceSets {
    main {
      jniLibs.srcDirs = ['src/main/jniLibs']
    }
  }
}

2 在 ArkTS 侧加载原生模块前,通过 deviceInfo.osFullName 区分运行环境:

import { deviceInfo } from '@kit.DeviceKit';

let osName = deviceInfo.osFullName;

if (osName.startsWith('Android')) {
  // 仅在 Android 侧加载原生库
  let router = requireNativeModule('librouter');
}

3 将 router.abc 文件放入 src/main/assets/arkui-x/systemres/abc 目录,保证构建时自动打包至 APK 的 assets 路径。

4 在 AndroidManifest.xml 中添加权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

针对不同设备架构调整 build.gradle 配置:

android {
  defaultConfig {
    ndk { abiFilters 'arm64-v8a' }
  }
}

更多关于HarmonyOS 鸿蒙Next ArkUI-X 在 Android 设备上无法正确加载 librouter.so的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next ArkUI-X在Android设备上无法加载librouter.so可能是架构不兼容或路径问题导致。检查librouter.so是否为Android支持的ABI架构(armeabi-v7a/arm64-v8a/x86_64)。确认so文件已正确打包到APK的lib目录下。在鸿蒙工程中需配置multiPlatformOptions指定Android支持的abiFilters。若使用DevEco Studio,需确保build-profile.json5中android{}配置正确。so文件需使用NDK编译而非鸿蒙工具链。

从日志来看,问题主要是librouter.so库文件未能正确加载。以下是关键点分析:

  1. 系统尝试了三个路径加载库文件都失败了:
  • /data/app/…/lib/arm64/librouter.so
  • /data/user/…/arkui-x/libs/arm64-v8a/librouter.so
  • /data/user/…/arkui-x/systemres/abc/router.abc
  1. 最终导致router模块加载失败,引发"pushUrl of undefined"错误

解决方案建议:

  1. 确认librouter.so是否已正确打包到APK中
  2. 检查构建配置中是否正确设置了native库的路径
  3. 如果是跨平台开发,确保Android平台的库文件已正确包含

需要检查gradle配置中是否有类似:

```groovy
android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

并确认librouter.so文件已放置在正确的目录结构下。

回到顶部