android - 每个 ABI 的不同库搜索路径

标签 android gradle android-ndk android-gradle-plugin gradle-experimental

使用 Android Gradle Experimental 插件版本 0.9.1。我需要为每个 ABI 设置不同的静态库搜索路径,有什么方法可以实现吗?
这里是 build.gradle fragment 我没有,在我添加 ldFlags 的行中我要加 -L路径名包含特定 ABI 名称的编译器键:

model {

    android {
        compileSdkVersion = 25
        buildToolsVersion = '25.0.2'

        defaultConfig {
            minSdkVersion.apiLevel = 9
            targetSdkVersion.apiLevel = 9
            versionCode = 1
            versionName = '1.0'
        }
        ndk {
            platformVersion = 21
            moduleName = "stob"
            toolchain = 'clang'
            abiFilters.addAll(['armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64']) //this is default
            ldLibs.addAll(['android', 'log'])
            stl = 'c++_static'
            cppFlags.add("-std=c++11")
            cppFlags.add("-fexceptions")
            cppFlags.add("-frtti")
            cppFlags.add("-I" + projectDir.getAbsolutePath() + "/build/ndkLibs/include")
            //!!! Here I want to search for libs in ABI-specific directory
            ldFlags.add("-L" + projectDir.getAbsolutePath() + "/build/ndkLibs/${getAbi()}")
        }

    }
}

我怎样才能实现这个 getAbi()功能?

最佳答案

我发现了一个不是很优雅,但仍然可以解决问题的方法:

model {
    android {
        compileSdkVersion = 25
        buildToolsVersion = '25.0.2'

        defaultConfig {
            minSdkVersion.apiLevel = 9
            targetSdkVersion.apiLevel = 9
            versionCode = 1
            versionName = '1.0'
        }
        ndk {
            platformVersion = 21
            moduleName = "blahblah"
            toolchain = 'clang'
            abiFilters.addAll(['armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64']) //this is default
            ldLibs.addAll(['android', 'log'])
            stl = 'c++_static'
            cppFlags.add("-std=c++11")
            cppFlags.add("-fexceptions")
            cppFlags.add("-frtti")
            cppFlags.add("-I" + projectDir.getAbsolutePath() + "/build/ndkLibs/include")
        }
        abis {
            create("armeabi") {
                ldFlags.add("-L" + projectDir.getAbsolutePath() + "/build/ndkLibs/armeabi")
            }
            create("armeabi-v7a") {
                ldFlags.add("-L" + projectDir.getAbsolutePath() + "/build/ndkLibs/armeabi-v7a")
            }
            create("arm64-v8a") {
                ldFlags.add("-L" + projectDir.getAbsolutePath() + "/build/ndkLibs/arm64-v8a")
            }
            create("x86") {
                ldFlags.add("-L" + projectDir.getAbsolutePath() + "/build/ndkLibs/x86")
            }
            create("x86_64") {
                ldFlags.add("-L" + projectDir.getAbsolutePath() + "/build/ndkLibs/x86_64")
            }
            create("mips") {
                ldFlags.add("-L" + projectDir.getAbsolutePath() + "/build/ndkLibs/mips")
            }
            create("mips64") {
                ldFlags.add("-L" + projectDir.getAbsolutePath() + "/build/ndkLibs/mips64")
            }
        }
    }
}

关于android - 每个 ABI 的不同库搜索路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43617911/

相关文章:

maven - 在父子项目中使用不同版本的库

android - 调用 GLSurfaceView.onPause() 后 Activity 暂停超时

android - 如何获取短信对话的联系人姓名?

spring-boot - QueryDSL 注释处理器和 gradle 插件

java - 将字符串转换为颜色 int

Gradle - 帮助为 Ivy Publish 动态设置修订

opencv - opencv 的某些功能在某些特定情况下显示错误

cygwin - 如何在 Windows 7 中使用 cygwin 进行符号链接(symbolic link)

android - 尽管正确显示为白色,但图像并未完全显示为白色

java - AppStateManager 无法解析 - Cloud Save