gradle.build の ndk {} DSL ブロック内で LOCAL_SRC_FILES を定義する必要がある場合があります。ネイティブ コードを含む Android Studio プロジェクトを操作する場合は、このファイルを使用します。これは現在の Gradle プラグインではネイティブにサポートされていませんが、同様の機能を実現するためのアプローチがいくつかあります。
以前のバージョンの Gradle では、不要なプラグインを除外することでこの問題に対処できました。ビルドプロセスからのソースファイル。ただし、このアプローチでは、通常の NDK ビルド タスクを無効にし、カスタム ビルド タスクを定義する必要がありました。
Gradle の実験的プラグイン (com.android.tools.build:gradle-) の導入により、実験的:0.4.0)、パターンに基づいて NDK ビルドからファイルを除外できるようになりました。これを行うには、次の構文を使用します。
android.sources { main { jni.source { srcDirs = ["~/srcs/jni"] exclude "**/win.cpp" } } }
これにより、NDK ビルドで Android をターゲットにしながら、他のプラットフォーム (iOS、WinRT など) を対象としたファイルなどの特定のファイルを除外できます。
デバッグ可能なセットアップが必要な場合、回避策として静的ファイルを構築する必要があります。 ndk-build を使用してライブラリを作成し、それを必要なオブジェクトとリンクして、必要なシンボルを提供します。このアプローチでは、ネイティブ ソースをプラットフォーム固有のファイルとプラットフォームに依存しないファイルに分割する必要があります。
build.gradle ファイル内:
task buildStaticLib(type: Exec, description: 'Compile Static lib via NDK') { commandLine "$ndkBuild", "$staticLibPath", "NDK_PROJECT_PATH=~/srcs", "NDK_OUT=$ndkOut", "APP_ABI=$appAbi", "APP_STL=gnustl_static" } tasks.all { task -> if (task.name.startsWith('link')) { task.dependsOn buildStaticLib } } model { android.ndk { moduleName = "hello-jni" abiFilters += "$appAbi".toString() ldFlags += "$staticLib".toString() ldLibs += "log" cppFlags += "-std=c++11" } android.sources { main.jni.source { srcDirs = ["~/srcs/jni"] } } }
~/srcs/Android.mk 内:
LOCAL_PATH := $(call my-dir)/.. include $(CLEAR_VARS) LOCAL_MODULE := staticLib LOCAL_SRC_FILES := HelloJni.cpp LOCAL_CPPFLAGS += -std=c++11 include $(BUILD_STATIC_LIBRARY)
あるいは、次のような外部ツールの使用を検討できます。 CMake または Buck を使用して、ネイティブ コードのビルド プロセスを管理し、Gradle と統合します。このアプローチにより、コンパイルとリンクのプロセスの柔軟性と制御が向上します。
以上がAndroid Gradle の ndk {} DSL 内で LOCAL_SRC_FILES を定義できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。