请问,我想知道如何使用 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(使用前将#替换为@)