Rumah >pembangunan bahagian belakang >C++ >Bolehkah saya Tentukan LOCAL_SRC_FILES dalam ndk {} DSL dalam Android Gradle?

Bolehkah saya Tentukan LOCAL_SRC_FILES dalam ndk {} DSL dalam Android Gradle?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 21:19:14246semak imbas

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

Adakah mungkin untuk mentakrifkan LOCAL_SRC_FILES dalam ndk {} DSL?

Anda mungkin menghadapi keperluan untuk mentakrif LOCAL_SRC_FILES dalam blok DSL ndk {} dalam gradle.build anda fail apabila bekerja dengan projek Android Studio yang menyertakan kod asli. Walaupun ini tidak disokong secara asli oleh pemalam Gradle semasa, terdapat beberapa pendekatan untuk mencapai kefungsian yang serupa.

Menggunakan Pendekatan Lama

Dalam versi Gradle yang terdahulu, anda boleh menangani isu ini dengan mengecualikan yang tidak diingini sumber fail daripada proses binaan. Walau bagaimanapun, pendekatan ini memerlukan melumpuhkan tugas binaan NDK biasa dan menentukan tugasan tersuai.

Menggunakan Pemalam Eksperimen

Dengan pengenalan pemalam percubaan Gradle (com.android.tools.build:gradle- eksperimen:0.4.0), anda kini boleh mengecualikan fail daripada binaan NDK berdasarkan corak. Untuk berbuat demikian, gunakan sintaks berikut:

android.sources {
    main {
        jni.source {
            srcDirs = ["~/srcs/jni"]
            exclude "**/win.cpp"
        }
    }
}

Ini membolehkan anda mengecualikan fail tertentu, seperti yang dimaksudkan untuk platform lain (cth., iOS, WinRT) sambil menyasarkan Android dalam binaan NDK anda.

Penyelesaian untuk Nyahpepijat

Jika anda memerlukan persediaan boleh nyahpepijat, penyelesaian melibatkan membina statik perpustakaan dengan ndk-build dan menghubungkannya dengan objek yang diperlukan untuk menyediakan simbol yang diperlukan. Pendekatan ini memerlukan pembahagian sumber asli anda kepada fail khusus platform dan bebas platform.

Dalam fail build.gradle anda:

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"]
        }
}
}

Dalam ~/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)

Pendekatan Alternatif

Sebagai alternatif, anda boleh mempertimbangkan untuk menggunakan alat luaran seperti CMake atau Buck untuk mengurus proses binaan kod asli anda dan menyepadukannya dengan Gradle. Pendekatan ini memberikan lebih fleksibiliti dan kawalan ke atas proses penyusunan dan pemautan.

Atas ialah kandungan terperinci Bolehkah saya Tentukan LOCAL_SRC_FILES dalam ndk {} DSL dalam Android Gradle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn