ホームページ >バックエンド開発 >C++ >Android Gradle の ndk {} DSL 内で LOCAL_SRC_FILES を定義できますか?

Android Gradle の ndk {} DSL 内で LOCAL_SRC_FILES を定義できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-10 21:19:14246ブラウズ

Can I Define LOCAL_SRC_FILES within the ndk {} DSL in Android Gradle?

ndk {} DSL で LOCAL_SRC_FILES を定義することは可能ですか?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。