このGradle全体とAndroid Studioのサポートは初めてです。エクスポートオプションを使用してAndroidプロジェクトをGradleに変換できました。
しかし、NDKビルドをGradleビルドプロセスに統合するためのドキュメントまたは開始点を探しています。
可能であれば、ビルドバイナリ(.soファイル)をアセットディレクトリにコピーする、ある種の「後」の段階も必要です。
このGradle全体とAndroid Studioのサポートは初めてです。エクスポートオプションを使用してAndroidプロジェクトをGradleに変換できました。
しかし、NDKビルドをGradleビルドプロセスに統合するためのドキュメントまたは開始点を探しています。
可能であれば、ビルドバイナリ(.soファイル)をアセットディレクトリにコピーする、ある種の「後」の段階も必要です。
回答:
統合の最初のバージョンを1.3のプレビューとしてリリースしました:http : //tools.android.com/tech-docs/android-ndk-preview
1.3が最終版になった後も、統合はプレビューのままです。最終的な時期に関する現在のETAはありません(2015/07/10現在)。
詳細はこちら:http : //tools.android.com/tech-docs/android-ndk-preview
更新: NDKをサポートするAndroid Studioがリリースされました:http : //tools.android.com/tech-docs/android-ndk-preview
スクリプトでビルドするには、以下のgradleソリューションが機能するはずです:
私は自分のビルドスクリプトを使用してファイルに追加しています(で動作する0.8+
ようです):これは以下の解決策と同等のようです(しかし、gradleファイルでは見栄えがよくなります)。
android {
sourceSets {
main {
jniLibs.srcDirs = ['native-libs']
jni.srcDirs = [] //disable automatic ndk-build
}
}
}
残念ながら、ディレクトリが存在しない場合や.so
ファイルが含まれていない場合でも、ビルドは失敗しません。
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { it.jniFolders = [file("libs")] as Set }
。助けてくれてありがとう!
jni.srcDirs = [] //disable automatic ndk-build
は、Android StudioがC / C ++ソースコードを再構築できないため、非常に重要です。私はあなたの投稿を見てこれが私の問題を解決するまで、2日間これを理解しようとしました。C / C ++はMakefileによって40年以上ビルドされてきたので、NDKビルドは、gradleスクリプトではなく、Android.mkコマンドラインのmakefileのみで個別にビルドする方が良いと思います。
Android Studioが1.0に更新されたことで、NDKツールチェーンのサポートが大幅に改善されました(注:新しい実験的なGradleプラグインとAndroid Studio 1.5での使用方法については、この投稿の下部にある私の更新内容をご覧ください)。
Android StudioとNDKは十分に統合されているので、モジュールのbuild.gradleにndk {}ブロックを作成し、ソースファイルを(module)/ src / main / jniディレクトリに設定するだけで済みます。できた!
コマンドラインからndk-buildを実行する必要はありません。
私はここの私のブログ記事でそれについてすべてを書きました:http : //www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
顕著な点は次のとおりです。
ここで、知っておくべきことが2つあります。デフォルトでは、Androidアプリケーションにロードしたい外部ライブラリがある場合、それらはデフォルトで(モジュール)/ src / main / jniLibsで検索されます。これを変更するには、モジュールのbuild.gradleでsourceSets.main.jniLibs.srcDirsを設定します。対象とする各アーキテクチャー(例:x86、arm、mips、arm64-v8aなど)のライブラリーを含むサブディレクトリーが必要です。
NDKツールチェーンによってデフォルトでコンパイルされるコードは(module)/ src / main / jniにあり、上記と同様に、モジュールのbuild.gradleでsourceSets.main.jni.srcDirsを設定することでコードを変更できます。
これをモジュールのbuild.gradleに入れます:
ndk {
moduleName "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
cFlags "-std=c++11 -fexceptions" // Add provisions to allow C++11 functionality
stl "gnustl_shared" // Which STL library to use: gnustl or stlport
}
これがC ++コードをコンパイルするプロセスです。そこから、コードをロードしてラッパーを作成する必要があります。しかし、質問から判断すると、すでにすべての方法を知っているので、再ハッシュは行いません。
また、この例のGithubリポジトリをここに配置しました: http //github.com/sureshjoshi/android-ndk-swig-example
Android Studio 1.3がリリースされると、JetBrains CLionプラグインによるC ++のサポートが改善されるはずです。私は現在、これによりAndroid Studio内からJavaおよびC ++の開発が可能になると想定しています。ただし、上で述べたように、Gradle NDKセクションを使用する必要があると思います。さらに、CLionが自動的に実行しない限り、Java <-> C ++ラッパーファイルを作成する必要があると私は思います。
最新の実験的なGradleプラグイン(0.6.0-alpha3)でAndroid Studio 1.5を使用するように、ブログとGithubリポジトリ(developブランチ内)を更新しました。
http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/ http://github.com/sureshjoshi/android-ndk-swig-example
NDKセクションのGradleビルドは次のようになります。
android.ndk {
moduleName = "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
cppFlags.add("-std=c++11") // Add provisions to allow C++11 functionality
cppFlags.add("-fexceptions")
stl = "gnustl_shared" // Which STL library to use: gnustl or stlport
}
また、Android Studioには、「native」キーワードを使用してC ++-Javaで生成されたラッパーのオートコンプリート機能があります。
しかし、それは完全にバラ色ではありません...ライブラリをラップしてコードを自動生成し、ネイティブキーワードの自動生成を使用しようとすると、コードがSwig _wrapの間違った場所に配置されます。 .cxxファイル...したがって、「extern C」ブロックに移動する必要があります。
Android Studio 2.2以降では、GradleとCMakeを介したNDKツールチェーンが本質的に「ネイティブ」(駄洒落ではない)サポートされていることについて言及しなかったとしたら、私は見逃してしまいます。これで、新しいプロジェクトを作成するときに、C ++サポートを選択するだけで問題ありません。
独自のJNIレイヤーコードを生成するか、上記のSWIG手法を使用する必要がありますが、AndroidプロジェクトでのC ++の足場は簡単です。
CMakeListsファイル(C ++ソースファイルを配置する場所)の変更はAndroid Studioによって取得され、関連するライブラリが自動的に再コンパイルされます。
現在、プレビューは終了しており、誰でも利用できます。 https //developer.android.com/studio/projects/add-native-code.html
ndk-build
は、jni
プロジェクトソースにディレクトリます。これはAndroid Studio 0.5.9(カナリアビルド)で動作しています。
ANDROID_NDK_HOME
環境変数に追加するか、Android Studioプロジェクトに追加ndk.dir=/path/to/ndk
しますlocal.properties
。これにより、Androidスタジオでndkを自動的に実行できます。
最新のGradleサンプルプロジェクトをダウンロードして、ndkプロジェクトの例をご覧ください。(これらはページの下部にあります)。良いサンプルプロジェクトはndkJniLib
です。
gradle.build
NDKサンプルプロジェクトからをコピーします。こんな感じになります。これgradle.build
により、アーキテクチャごとに異なるAPKが作成されます。build variants
ペインを使用して、必要なアーキテクチャを選択する必要があります。
apply plugin: 'android'
dependencies {
compile project(':lib')
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.2"
// This actual the app version code. Giving ourselves 100,000 values [0, 99999]
defaultConfig.versionCode = 123
flavorDimensions "api", "abi"
productFlavors {
gingerbread {
flavorDimension "api"
minSdkVersion 10
versionCode = 1
}
icecreamSandwich {
flavorDimension "api"
minSdkVersion 14
versionCode = 2
}
x86 {
flavorDimension "abi"
ndk {
abiFilter "x86"
}
// this is the flavor part of the version code.
// It must be higher than the arm one for devices supporting
// both, as x86 is preferred.
versionCode = 3
}
arm {
flavorDimension "abi"
ndk {
abiFilter "armeabi-v7a"
}
versionCode = 2
}
mips {
flavorDimension "abi"
ndk {
abiFilter "mips"
}
versionCode = 1
}
fat {
flavorDimension "abi"
// fat binary, lowest version code to be
// the last option
versionCode = 0
}
}
// make per-variant version code
applicationVariants.all { variant ->
// get the version code of each flavor
def apiVersion = variant.productFlavors.get(0).versionCode
def abiVersion = variant.productFlavors.get(1).versionCode
// set the composite code
variant.mergedFlavor.versionCode = apiVersion * 1000000 + abiVersion * 100000 + defaultConfig.versionCode
}
}
これにより、Android.mkファイルとApplication.mkファイルは無視されます。回避策として、gradleにatuomatic ndk-build呼び出しを無効にするように指示してから、ndkソースのディレクトリを手動で指定できます。
sourceSets.main {
jniLibs.srcDir 'src/main/libs' // use the jni .so compiled from the manual ndk-build command
jni.srcDirs = [] //disable automatic ndk-build call
}
さらに、自動呼び出しを無効にしただけなので、gradleビルドスクリプトでndk-buildを明示的に呼び出すことをお勧めします。
task ndkBuild(type: Exec) {
commandLine 'ndk-build', '-C', file('src/main/jni').absolutePath
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
tasks.all { task -> if (task.name.contains('Ndk')) task.enabled = false }
Xavierが言ったように、gradle 0.7.2+を使用している場合は、ビルド済みのファイルを/ src / main / jniLibs /に置くことができます。
次から取得:https : //groups.google.com/d/msg/adt-dev/nQobKd2Gl_8/ctDp9viWaxoJ
現在(Android Studio v0.8.6)、それは非常に簡単です。「Hello world」タイプのアプリを作成する手順は次のとおりです。
Android NDKをダウンロードし、ルートフォルダーを適切な場所に配置します。
以下をlocal.properties
ファイルに追加します。
ndk.dir=<path-to-ndk>
次defaultConfig
のversionName
行を、クロージャー内のbuild.gradleファイルの行の直後に追加します。ndk { moduleName="hello-world" }
アプリモジュールのmain
ディレクトリに、という新しいフォルダを作成しますjni
。
そのフォルダ内に、というファイルを作成しますhello-world.c
。このファイルを以下に示します。
でActivity
メソッド(または関数ですか?)を呼び出す方法の例については、以下のコード例を参照してくださいhello-world.c
。
hello-world.c
#include <string.h>
#include <jni.h>
jstring
Java_me_mattlogan_ndktest_MainActivity_stringFromJNI(JNIEnv* env, jobject thiz)
{
return (*env)->NewStringUTF(env, "Hello world!");
}
MainActivity.java
public class MainActivity extends Activity {
static {
System.loadLibrary("hello-world");
}
public native String stringFromJNI();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String testString = stringFromJNI();
TextView mainText = (TextView) findViewById(R.id.main_text);
mainText.setText(testString);
}
}
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "me.mattlogan.ndktest"
minSdkVersion 15
targetSdkVersion 20
versionCode 1
versionName "1.0"
ndk {
moduleName "hello-world"
}
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Java_me_mattlogan_ndktest_MainActivity_stringFromJNI
、自分のものに変更することを忘れないでください:)
UNIXを使用している場合は、最新バージョン(0.8)でndk-buildが追加されます。追加する方法は次のとおりです。
android.ndk {
moduleName "libraw"
}
それは 'src / main / jni'の下にJNIを見つけることを期待していますが、それ以外の場合は次のように定義できます。
sourceSets.main {
jni.srcDirs = 'path'
}
2014年1月28日のバージョン0.8では、Windowsでビルドが壊れているため、次のコマンドでビルドを無効にする必要があります。
sourceSets.main {
jni.srcDirs = [] //disable automatic ndk-build call (currently broken for windows)
}
エレガントな回避策がhttps://groups.google.com/d/msg/adt-dev/nQobKd2Gl_8/Z5yWAvCh4h4Jに示されています。
基本的に、「lib / armeabi / yourlib.so」を含むjarを作成し、そのjarをビルドに含めます。
ndk-build
.jar
.so
すぐにコンパイルされる.so
ファイルのパッケージ化を自動化する良い答えは、別の(閉じた)スレッドで与えられます。これを機能させるには、行を変更する必要がありました。
from fileTree(dir: 'libs', include: '**/*.so')
に:
from fileTree(dir: 'src/main/libs', include: '**/*.so')
この変更がなければ、.so
ファイルは見つかりませんでした。そのため、それらをパッケージ化するタスクは実行されませんでした。
@plaisthosからの回答が最新のGradleバージョンで壊れましたが、それを行う方法はまだあります。を作成するnative-libs
プロジェクトディレクトリのルートにディレクトリをすべてのライブラリをこのディレクトリにコピーします。
次の行をbuild.gradleに追加します。ビルドして幸せになります。
task copyNativeLibs(type: Copy) {
from(new File(project(':<your project>').getProjectDir(), 'native-libs')) { include '**/*.so' }
into new File(buildDir, 'native-libs')
}
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
clean.dependsOn 'cleanCopyNativeLibs'
これは、gradleのandroid-ndkを使用してビルドするために使用するコードです。これには、gradle.properties
ieにndkディレクトリパスを追加します。下記のコードからわかるようndkdir=/home/user/android-ndk-r9d
に、すべてのjniファイルをフォルダーnative
に追加して配置しsrc/main/
ます。それはあなたが通常のように使用できるネイティブライブラリでjarを作成しますSystem.loadLibrary("libraryname");
dependencies {
compile fileTree(dir: "$buildDir/native-libs", include: '*.jar')
}
task ndkBuild(type: Exec) {
commandLine "$ndkdir/ndk-build", "--directory", "$projectDir/src/main/native", '-j', Runtime.runtime.availableProcessors(),
"APP_PLATFORM=android-8",
"APP_BUILD_SCRIPT=$projectDir/src/main/native/Android.mk",
"NDK_OUT=$buildDir/native/obj",
"NDK_APP_DST_DIR=$buildDir/native/libs/\$(TARGET_ARCH_ABI)"
}
task nativeLibsToJar(type: Jar, description: 'create a jar with native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
from fileTree(dir: "$buildDir/native/libs", include: '**/*.so')
into 'lib/'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn nativeLibsToJar
}
nativeLibsToJar.dependsOn 'ndkBuild'
次のコードを使用してネイティブDropboxライブラリをコンパイルしました。AndroidStudio v1.1を使用しています。
task nativeLibsToJar(type: Zip) {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
extension 'jar'
from fileTree(dir: 'src/main/libs', include: '**/*.so')
into 'lib/'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
私が使用しているndk.dir=/usr/shareData/android-ndk-r11b
NDKの//パスを
中にlocal.propertiesアンドロイドスタジオプロジェクト内のファイル。この行を追加します。
android.useDeprecatedNdk=true
でgradle.propertiesのアンドロイドスタジオプロジェクト内のファイル。
詳細はこちら:http : //tools.android.com/tech-docs/android-ndk-preview
Naxosの発言を拡張するために(正しい方向に送ってくれてNaxosに感謝します!)、最近リリースされたNDKの例からかなりのことを学び、同様の質問に回答を投稿しました。
Android Gradleプラグイン0.7でNDKを構成する方法
この投稿には、ビルド済みのネイティブライブラリをさまざまなアーキテクチャのアプリにリンクする方法の詳細と、NDKサポートをbuild.gradleスクリプトに直接追加する方法に関する情報が含まれています。ほとんどの場合、zipとコピーに関する作業を行う必要はもうありません。
Android StudioプロジェクトでNDKを機能させるために使用した手順は次のとおりです。私はこのチュートリアルを使用して私を助けました https://software.intel.com/en-us/videos/using-the-ndk-with-android-studio
NDKを使用するには、local.propertiesにNDK行を追加する必要があります。だからあなたのsdk.dirの下に追加
ndk.dir=C\:\\MyPathToMyNDK\ndk
私のアプリbuild.gradleには次のコードがあります
ndk {
moduleName "myLib"
ldLibs "log"
stl "gnustl_shared"
cFlags "-std=c++11 -frtti -fexceptions -pthread"
}
moduleNameは、ネイティブコードに付ける名前です。これが共有ライブラリの名前だと思います。ldLibsを使用すると、LogCatにログを記録できます。stlは、インポートするstlです。Eclipse NDKと同じように、多くのオプションがあります。(http://www.kandroid.org/ndk/docs/CPLUSPLUS-SUPPORT.html)
cFlagsはまだ私にとってはある程度の黒魔術です。私はすべてのオプションとそれらが私に与えるもののための良い情報源を見つけていません。StackOverflowを検索して、必要なものを探します。それが私が見つけた場所です。私はc ++ 11によって新しいc ++ 11標準を使用できることを知っています。
これは、ネイティブコードからLogCatにログインする方法の例です。
__android_log_print(ANDROID_LOG_DEBUG, "TestApp", "Adding - String %d has a field name of %s and a value of %s", i, lKeyUTF8.c_str(), lValueUTF8.c_str());
EclipseからAndroid Studioでプロジェクトを構成する:GradleにエクスポートせずにEclipse NDKプロジェクトをAndroid Studioにインポートする必要があり、それは機能します。また、local.propertiesにNDKのパスを追加する必要があり、エラーが表示された場合は追加します
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build callenter code here
}
build.gradleファイルその後、作成JNIターミナル使用して、フォルダやファイルを、それが動作する実行
Android Studioが安定したチャネルに入ったので、android-ndkサンプルを実行するのは非常に簡単です。これらのサンプルはndk実験的プラグインを使用しており、Android NDKオンラインドキュメントからリンクされているものよりも新しいものです。それらが機能することがわかったら、build.gradle、local.properties、gradle-wrapper.propertiesファイルを調べ、それに応じてプロジェクトを変更できます。以下は、それらを機能させるための手順です。
[設定]、[外観と動作]、[システム設定]、[Android SDK]に移動し、[SDKツール]タブを選択して、リストの下部にあるAndroid NDKバージョン1.0.0を確認します。NDKがダウンロードされます。
新しくダウンロードしたNDKの場所をポイントします。sdk / ndk-bundleディレクトリに配置されることに注意してください。これを行うには、ファイル、プロジェクト構造、SDKの場所(左側)を選択し、Android NDKの場所の下にパスを指定します。これにより、次のようなlocal.propertiesにndkエントリが追加されます。
Mac / Linux:ndk.dir = / Android / sdk / ndk-bundle
Windows:ndk.dir = C:\ Android \ sdk \ ndk-bundle
このようにして、gles3gni、native-codec、およびビルダーを除くすべてのプロジェクトをリポジトリーに正常にビルドしてデプロイしました。私は以下を使用しています:
Android Studio 1.3ビルドAI-141.2117773
2015年7月28日公開のandroid-ndkサンプル(上記のリンク)
SDKツール24.3.3
C:\ Android \ sdk \ ndk-bundle
Gradle 2.5
Gradleプラグイン0.2.0
Windows 8.1 64ビットに 抽出されたNDK r10e
通常、NDKを使用したビルドは、Android.mkへのndkBuildパスまたはCMakeLists.txtへのcmakeパスを正しく指定するのと同じくらい簡単です。Android StudioのC / C ++サポートはCLionに基づいており、プロジェクトフォーマットとしてCMakeを使用するため、古いAndroid.mkよりもCMakeをお勧めします。私の経験では、これにより、IDEはより大きなプロジェクトでより応答性が高くなる傾向があります。プロジェクトでコンパイルされたものはすべてビルドされ、APKに自動的にコピーされます。
apply plugin: 'com.android.library'
android {
compileSdkVersion 19
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 19
targetSdkVersion 19
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'x86'
// 64-bit support requires an Android API level higher than 19; Namely 21 and higher
//abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=clang',
'-DANDROID_PLATFORM=android-19',
'-DANDROID_STL=gnustl_static',
'-DANDROID_ARM_NEON=TRUE'
}
}
}
externalNativeBuild {
cmake {
path 'src/main/jni/CMakeLists.txt'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
NDKビルドの静的ライブラリ(.a)は自動的に含まれますが、ビルド済みの動的ライブラリ(.so)はに配置する必要がありjniLibs
ます。これはを使用して設定できますsourceSets
が、標準を採用する必要があります。あなたは追加のコマンドを必要としませんbuild.gradle
ビルド済みライブラリを含める場合。
jniLibs
構造の詳細については、Android Gradle Plugin User Guideをご覧ください。
|--app: |--|--build.gradle |--|--src: |--|--|--main |--|--|--|--java |--|--|--|--jni |--|--|--|--|--CMakeLists.txt |--|--|--|--jniLibs |--|--|--|--|--armeabi |--|--|--|--|--|--.so Files |--|--|--|--|--armeabi-v7a |--|--|--|--|--|--.so Files |--|--|--|--|--x86 |--|--|--|--|--|--.so Files
その後、下、通常、結果APKがあなたの.soファイルが含まれて検証することができますbuild/outputs/apk/
使用して、unzip -l myApp.apk
内容を一覧表示します。
NDKで共有ライブラリを構築している場合は、これ以上何もする必要はありません。APKに正しくバンドルされます。
この行をアプリに追加するだけです build.gradle
dependencies {
...
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
}
task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
destinationDir file("$buildDir/native-libs")
baseName 'native-libs'
extension 'jar'
from fileTree(dir: 'libs', include: '**/*.so')
into 'lib/armeabi/'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn(nativeLibsToJar)
}
今、私はとても成功してロードできます!
1. .soファイルをこのパスに追加する
Project:
| --src |-| --main |-|-| --java |-|-| --jniLibs |-|-|-| --armeabi |-|- |-|-|-。soファイル
2.このコードをgradle.buildに追加します
android {
splits {
abi {
enable true
reset()
include 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a', 'armeabi'
universalApk false
}
}
}
3。System.loadLibrary("yousoname");
プロジェクトがEclipseからエクスポートされた場合、gradleファイルに以下のコードを追加します。
android {
sourceSets{
main{
jniLibs.srcDir['libs']
}
}
}
2.Androidスタジオでプロジェクトを作成する場合:
src / main /にjniLibsという名前のフォルダーを作成し、*。soファイルをjniLibsフォルダーに配置します。
そしてgradleファイルに以下のコードをコピーしてください:
android {
sourceSets{
main{
jniLibs.srcDir['jniLibs']
}
}
}
私はSJoshi(オラクル男)が最も完全な答えを持っていると思いますが、SWIGプロジェクトは特別なケースであり、面白くて便利ですが、標準のSDK antベースのプロジェクトでうまく機能している大多数のプロジェクトには一般化されていません+ NDK。私たちは皆、Androidスタジオを使用する可能性が最も高いか、理論上はGradleが提供するモバイル向けのCIフレンドリーなビルドツールチェーンが必要です。
私はどこかから借りたアプローチを投稿しました(SOでこれを見つけましたが、アプリbuild.gradleの要旨を投稿しました:https ://gist.github.com/truedat101/c45ff2b69e91d5c8e9c7962d4b96e841 )。一言で言えば、私は以下をお勧めします:
Gradle for Androidは、私が借用したMavenの概念とプロジェクトのディレクトリの構造の見た目が好きなように、私の意見では混乱しています。このNDK機能は、ほぼ3年以上「間もなく登場」します。