Android JNI 开发关键要点
- 子模块配置了 abiFilters,主模块也需要相应的配置
android {...defaultConfig {...ndk {abiFilters "armeabi", "armeabi-v7a", "x86", "mips"}}...
}
- 现代的 ABI 配置以支持现代的 Android 设备
android {...defaultConfig {...ndk {abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"}}...
}
- 确保目录结构正确,libs 目录包含所有必要的 JNI 库文件
├── libs/
│ ├── armeabi/
│ │ └── XXX.so
│ ├── armeabi-v7a/
│ │ └── XXX.so
│ ├── x86/
│ │ └── XXX.so
│ └── mips/
│ └── XXX.so
- 对于传统的 Android 库模块配置,
.so 文件通常应该放在 libs 目录中,同时配置 sourceSets
android {...sourceSets {main {jniLibs.srcDirs = ['libs']}}
}
- 将
.so 文件放在 jniLibs 目录中,是 Android 官方推荐的标准做法
├── src/
│ └── main/
│ └── jniLibs/
│ ├── armeabi/
│ │ ├── XXX.so
│ │ └── (其他.so文件)
│ ├── armeabi-v7a/
│ │ ├── XXX.so
│ │ └── (其他.so文件)
│ ├── x86/
│ │ ├── XXX.so
│ │ └── (其他.so文件)
│ └── mips/
│ ├── XXX.so
│ └── (其他.so文件)
├── build.gradle
└── ...