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
根据楼主错误日志显示,系统尝试从两个路径加载 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库文件未能正确加载。以下是关键点分析:
- 系统尝试了三个路径加载库文件都失败了:
- /data/app/…/lib/arm64/librouter.so
- /data/user/…/arkui-x/libs/arm64-v8a/librouter.so
- /data/user/…/arkui-x/systemres/abc/router.abc
- 最终导致router模块加载失败,引发"pushUrl of undefined"错误
解决方案建议:
- 确认librouter.so是否已正确打包到APK中
- 检查构建配置中是否正确设置了native库的路径
- 如果是跨平台开发,确保Android平台的库文件已正确包含
需要检查gradle配置中是否有类似:
```groovy
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
并确认librouter.so文件已放置在正确的目录结构下。