Vous pourriez rencontrer le besoin de définir LOCAL_SRC_FILES dans le bloc ndk {} DSL de votre gradle.build lorsque vous travaillez avec des projets Android Studio incluant du code natif. Bien que cela ne soit pas pris en charge nativement par les plugins Gradle actuels, il existe plusieurs approches pour obtenir des fonctionnalités similaires.
Dans les versions antérieures de Gradle, vous pouviez résoudre ce problème en excluant les éléments indésirables. fichiers sources du processus de construction. Cependant, cette approche nécessitait de désactiver les tâches de construction NDK habituelles et d'en définir des personnalisées.
Avec l'introduction du plugin expérimental de Gradle (com.android.tools.build:gradle- experimental:0.4.0), vous pouvez désormais exclure des fichiers de la version NDK en fonction de modèles. Pour ce faire, utilisez la syntaxe suivante :
android.sources { main { jni.source { srcDirs = ["~/srcs/jni"] exclude "**/win.cpp" } } }
Cela vous permet d'exclure des fichiers spécifiques, tels que ceux destinés à d'autres plateformes (par exemple, iOS, WinRT) tout en ciblant Android dans votre build NDK.
Si vous avez besoin d'une configuration déboguable, une solution de contournement consiste à créer une bibliothèque statique avec ndk-build et à créer des liens. avec les objets nécessaires pour fournir les symboles requis. Cette approche nécessite de diviser vos sources natives en fichiers spécifiques à la plate-forme et indépendants de la plate-forme.
Dans votre fichier 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"] } } }
Dans ~/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)
Vous pouvez également envisager d'utiliser un outil externe comme CMake ou Buck pour gérer votre processus de création de code natif et intégrez-le à Gradle. Cette approche offre plus de flexibilité et de contrôle sur le processus de compilation et de liaison.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!