2017-09-18 6 views
0

Android.mkファイルのgradleから定義された変数を使用する方法を知っていますか、とにかくgradleからAndroid.mkに変数を渡すにはどうしたらいいですか?Android.mkでgradle変数を使用するには?

私はこれが奇妙に思える質問であることは知っていますが、私は多くの可能性を試してみて、うまくいきませんでした。

実際、私はクラスメートとの共同プロジェクトに取り組んでおり、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 

私は本当に任意の助けをいただければ幸いです!

+0

私はこれは古い記事ですけど、持っていますあなたはこれまでこれを解決しましたか? –

+0

まだ!今でも私はこれを行う方法を理解することはできません。どんな助けでも大いに感謝します。私たち(私のチームと私)はAndroid.mkファイルにデフォルトのパスを設定しなければならなかったので、誰も自分の設定にしたがってファイルを変更できますが、ファイルをプッシュすることはできません。 – Erman

答えて

0

私はついにこれを理解しました。うまくいけば、これはあなたや他の誰かに同様の問題を引き起こします。

私は私のbuild.gradleの終わりにこれを追加しました:

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

を次に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 
関連する問題