Android Studio如何为本机代码构建不同的arch?

时间:2016-12-19 01:01:53

标签: 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可以把它拿起来吗?

1 个答案:

答案 0 :(得分:1)

当您为每个拱编译库时,您可以将它们存储在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")

            }
        }
    }
相关问题