如何使用Android.mk中的gradle变量?

2024-01-06

请问,我想知道如何使用 Android.mk 文件中 gradle 定义的变量,或者是否有办法将某些变量从 gradle 传递到 Android.mk?

我知道这个问题看起来很奇怪,但我尝试了很多可能性,但没有成功。

事实上,我正在与同学合作开展一个项目,我们使用 OpenCV 和其他类型的库。问题是大多数这些库的路径根据开发人员的计算机而变化。因此,由于我们使用 git,这些文件中不断存在冲突。

为了解决这个问题,我首先使用文件中的环境变量/etc/profile.d/my_proj.sh,但没有成功。因此,我创建了一个属性文件,在其中放置了所有这些路径,并编写了一个函数来读取该文件并在 build.gradle 文件中获取这些值。现在我想知道如何与Android.mk file.

在这里我与您分享我的代码。 该函数在build.gradle.

apply plugin: 'com.android.library'
import org.apache.tools.ant.taskdefs.condition.Os

def Properties props = new Properties()
def propFile = file('/etc/profile.d/my_proj.properties')   //pay attention to the path
def opencvRoot;
if (propFile.canRead()){
    props.load(new FileInputStream(propFile))
    println(props)

    if (props!=null && props.containsKey('OPENCVROOT')) {
        opencvRoot = props['OPENCVROOT']
        println("opencvRoot = ${opencvRoot}")
    }else{
        println("Doesn't contains opencvRoot = ${opencvRoot}")
    }
}else{
    println("I can't read opencvRoot = ${opencvRoot}")
}

android {
    compileSdkVersion versionCompiler
    buildToolsVersion versionBuildTool

    defaultConfig {
        minSdkVersion 18
        targetSdkVersion versionTarget
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        externalNativeBuild {
            ndkBuild {
                arguments "OPENCV_ROOT:=${opencvRoot}"
            }
        }

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            jniLibs.srcDir 'src/main/libs'
            jni.srcDirs = []
        }
    }
}

The Android.mk file

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

#opencv
OPENCVROOT := $(OPENCV_ROOT) # This doesn't work
# OPENCVROOT:= /home/username/OpenCV-android-sdk

OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk

我真的很感激任何帮助!


我终于弄清楚了,希望这对您或其他有类似问题的人有帮助。

我将其添加到我的末尾build.gradle:

task ndkBuildCompile(type:Exec) {
    commandLine("${project.ext.ndk_dir}${File.separator}ndk-build",
                "OPENCVROOT=${opencvRoot}")
}

Then in Android.mk我可以像平常一样引用它,如下所示:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED

# This now WORKS
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Android.mk中的gradle变量? 的相关文章

随机推荐