結論
不能直接封裝。 DLL 為 Windows PE 格式,依賴 Windows API/CRT;SO 為 Linux ELF 格式,依賴 Linux 系統調用/glibc。二者二進制不兼容,指令集亦不同(x86/x64 vs ARM)。
正確移植路徑
- 獲取 DLL 對應的 C/C++ 源碼。
- 在 NDK 工程中編寫
Android.mk / CMakeLists.txt,針對目標架構(arm64-v8a, armeabi-v7a, x86_64 等)編譯生成 .so。
- 若源碼含平台相關代碼(Win32 API、線程、Socket 等),需重寫為跨平台或 Android 實現(如用 pthread、Bionic libc、POSIX API)。
- 通過 JNI 暴露接口供 Java/Kotlin 調用。
替代方案(無源碼時)
- 在服務端運行原 DLL(Windows 容器/VM),Android 通過 HTTP/gRPC 調用。
- 尋找同功能的開源跨平台庫(如 OpenSSL、SQLite、FFmpeg)直接編譯 SO。