请问如何在Android.mk文件中使用在gradle中定义的变量?或者有没有其他方式可以将gradle中的变量传递到Android.mk中呢?
我知道这个问题看起来很奇怪,但是我尝试了很多可能性都没有成功。
实际上,我正在与同学合作开发项目,我们使用OpenCV和其他类型的库。问题是大部分这些库的路径根据开发者的计算机而变化。因此,由于我们使用git,这些文件经常发生冲突。
为了解决这个问题,我首先在/etc/profile.d/my_proj.sh
文件中使用环境变量,但并没有成功。所以我创建了一个属性文件,在其中放置了所有这些路径,并编写了一个函数来读取该文件并获取这些值在build.gradle文件中。现在我想知道如何与Android.mk
文件共享这些变量。
下面是我分享给您的代码,包括在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 = []
}
}
}
Android.mk文件
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
我非常感激任何帮助!