Maison > développement back-end > C++ > Puis-je définir LOCAL_SRC_FILES dans le DSL ndk {} dans Android Gradle ?

Puis-je définir LOCAL_SRC_FILES dans le DSL ndk {} dans Android Gradle ?

Mary-Kate Olsen
Libérer: 2024-12-10 21:19:14
original
246 Les gens l'ont consulté

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

Est-il possible de définir LOCAL_SRC_FILES dans ndk {} DSL ?

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.

Utilisation d'une approche plus ancienne

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.

Utilisation du plugin expérimental

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"
        }
    }
}
Copier après la connexion

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.

Solution de contournement pour le débogage

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"]
        }
}
}
Copier après la connexion

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)
Copier après la connexion

Approche alternative

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal