2017-03-03 1 views
0

SWIGで生成されたネイティブコードでリンクする必要のあるAndroidアプリがあります。 MakefileはSWIGを実行し、生成されたJavaファイルをインストールし、* .soを作成することができます。現在、ネイティブコードディレクトリに移動し、手作業で「make」を実行し、生成されたJavaをRCSに格納する必要があります。これは本当に悪い考えです。NDKディレクトリでmakeを実行するためにgradleファイルを変更するには?

「make」のような外部タスクを実行するGradleにtask(){}を作成できることを知りました。

task buildSwig(type: Exec) { 
    workingDir './app/src/main/cpp' 
    commandLine 'make', 'distclean', 'swig', 'c++' 
} 

は、私は、このように 'build.gradle' でそれを置く:

修正
buildscript { 

    repositories { 
     jcenter() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.3' 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
     classpath 'me.tatarka:gradle-retrolambda:3.2.3' 
     classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.3.1' 
    } 

} 

allprojects { 
    repositories { 
     jcenter() 
     maven { 
      url "https://clojars.org/repo/" 
     } 
     flatDir { 
      dirs 'libs' 
     } 
    } 
    configurations.all { 
     resolutionStrategy.force 'com.android.support:support-annotations:23.1.1' 
    } 
} 

project.ext.preDexLibs = !project.hasProperty('disablePreDex') 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

task buildSwig(type: Exec) { 
    workingDir './app/src/main/cpp' 
    commandLine 'make', 'distclean', 'swig', 'c++' 
} 

は、標準ではGradleのファイルを生成し、これは私が持っているものです。私が持っている質問は次のとおりです。1)buildSwigタスクをビルド自体にどのようにフックしますか? 2)正しいGradleスクリプトを使用していますか?タスクは無視されているようです。当然のことながら、Makefileは他のすべてより前に実行する必要があります。

また、この問題が修正されると、生成されたJavaファイルはGradleビルドプロセスによって認識されますか?アプリケーションbuild.gradle

答えて

0

、あなたはJavaCompileタイプで作業を行うことができますあなたのbuildSwigタスクによって異なります。

android { 

    ...... 
    ...... 

    task buildSwig(type: Exec, description: 'Compile source') { 
     commandLine 'make', '-C', file('src/main/cpp').absolutePath, 'distclean', 'swig', 'c++' 
    } 

    task cleanSwig(type: Exec, description: 'Clean object files') { 
     commandLine 'make', '-C', file('src/main/cpp').absolutePath, 'distclean' 
    } 

    clean.dependsOn 'cleanSwig' 

    tasks.withType(JavaCompile) { 
     compileTask - > compileTask.dependsOn buildSwig 
    } 
} 
関連する問題