Rumah >pembangunan bahagian belakang >C++ >Bolehkah saya Tentukan LOCAL_SRC_FILES dalam ndk {} DSL dalam Android Gradle?
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.
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.
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.
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)
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!