android - Android Studio 如何为 native 代码构建不同的架构?

标签 android android-ndk cmake

在 Android Studio 2 及以上版本中,您可以使用 CMake 编写原生构建脚本。它会自动为您构建所有受支持的架构,这很棒。

但并不是所有网上的库源码都是CMake构建的。他们中的大多数仍在使用旧的 make 系统。

我有一个使用 make 构建系统的库。我已经设法构建了不同的 archs。我如何告诉 Android Studio 中的 CMake 构建系统我希望它链接到哪个版本的库?

我检查 https://developer.android.com/ndk/guides/cmake.html , 但没有 ARCH 之类的变量。

或者我可以将库放在某个地方,然后 Android Studio 中的 CMake 将能够拾取它?

最佳答案

当你为每个架构编译库时,你可以将它们存储在 app/src/main/jniLibs/{arch} 例如:armeabi/armeabi-v7a/arm64-v8a 然后将帖子末尾的行添加到您的应用程序 build.gradle。

productFlavours 用于配置编译变体,因此您可以通过这种方式正确链接已编译的库。

android.ndk {
        moduleName = "your_library_jni"
        cppFlags.add("-fexceptions")
        cppFlags.add("-std=c++11")
        cppFlags.add("-I" + file("src/main/jni").absolutePath)
        }

android.productFlavors {
        create("armeabi") {
            ndk.with{
                abiFilters.add("armeabi")

                File curDir = file('./')
                curDir = file(curDir.absolutePath)
                String libsDir = curDir.absolutePath + "/src/main/jniLibs/armeabi/"

                ldLibs.add(libsDir + "libyour_module.so")

            }
        }
        create("armv7-v7a") {
            ndk.with {
                abiFilters.add("armeabi-v7a")

                File curDir = file('./')
                curDir = file(curDir.absolutePath)
                String libsDir = curDir.absolutePath + "/src/main/jniLibs/armeabi-v7a/"

                ldLibs.add(libsDir + "libyour_module.so")

            }
        }
        create("arm64-v8a") {
            ndk.with{
                abiFilters.add("arm64-v8a")

                File curDir = file('./')
                curDir = file(curDir.absolutePath)
                String libsDir = curDir.absolutePath + "/src/main/jniLibs/arm64-v8a/"

                ldLibs.add(libsDir + "libyour_module.so")

            }
        }
    }

关于android - Android Studio 如何为 native 代码构建不同的架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214514/

相关文章:

android-ndk - 如何为 AArch64(使用 NDK)交叉编译 FFTW3?

c++ - Android NDK链接V8静态库: cannot find symbols,但它们在那里

c++ - 无法通过 CMake 链接 Boost 1.63.0

html - CMake 在特定行中插入文件

c++ - 如何避免使用 CMake FetchContent 进行更新检查?

java - Horizo​​ntalScrollView 与 EditText 向右跳转

java - 编写android :button programmatically

android - HTC Wildfire 支持哪个版本的 OpenGL?

java - 无法实现通知服务

java - 移动拖放 ImageButton 时 ImageButtons 被压扁