एंड्रॉइड स्टूडियो में एनडीके को जोड़ने के लिए कुछ कदम उठाए गए हैं। वर्तमान में, समर्थन प्रयोगात्मक के रूप में चिह्नित किया गया है और एएस आईडीई के भीतर एनडीके डाउनलोड करने की क्षमता को बंडल करना शुरू कर रहा है। डिफ़ॉल्ट रूप से, AS एक सामान्य Android.mk
और Application.mk
का उपयोग करता है जब स्रोत और/या libs jni
या jniLibs
फ़ोल्डर में रखे जाते हैं। अधिक अनुकूलन क्षमता प्रदान करने के लिए नीचे दिए गए निर्देश उन डिफ़ॉल्ट को ओवरराइड करते हैं।
संक्षेप में, आप की आवश्यकता होगी करने के लिए:
- डिफ़ॉल्ट बनाएं अपने स्रोत और libs के लिए
jni
और jniLibs
निर्देशिका।
- बताएँ एंड्रॉयड स्टूडियो जहाँ आपके NDK निर्माण श्रृंखला को खोजने के लिए
- Gradle कैसे संकलित करने के लिए बताएँ और जहाँ आपके libs जगह
- निर्माण और जोड़ने के क्रम
- निर्दिष्ट करने के लिए कुछ स्रोत
बनाएँ
Android.mk
फ़ाइल बनाएँ
बनाएं निर्देशिका
/app/src/main
के अंदर jni
और jniLibs
निर्देशिका बनाएं।
अद्यतन local.properties
अपने local.properties
फ़ाइल के अंदर, एक लाइन के लिए इसी तरह जोड़ें:
ndk.dir=/home/nathan/development/bin/android-ndk-r10e
अद्यतन build.gradle
इस मॉड्यूल के स्तर को दर्शाता है आवेदन स्तर नहीं। यह सुनिश्चित करता है कि हमने ऊपर दिए गए चरण में बिल्ड पथ को परिभाषित किया है और Android स्टूडियो को स्वचालित रूप से ndk-build का आह्वान करने की क्षमता को हटा दिया है। एक गाइड के रूप में निम्नलिखित उदाहरण का प्रयोग करें।
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.0"
defaultConfig.with {
applicationId = "com.example.hellojni"
minSdkVersion.apiLevel = 4
targetSdkVersion.apiLevel = 23
}
}
compileOptions.with {
sourceCompatibility=JavaVersion.VERSION_1_7
targetCompatibility=JavaVersion.VERSION_1_7
}
/*
* native build settings
*/
android.ndk {
moduleName = "hello-jni"
/*
* Other ndk flags configurable here are
* cppFlags += "-fno-rtti"
* cppFlags += "-fno-exceptions"
* ldLibs = ["android", "log"]
* stl = "system"
*/
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file('proguard-rules.txt')
}
}
android.productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters += "armeabi"
}
create("arm7") {
ndk.abiFilters += "armeabi-v7a"
}
create("arm8") {
ndk.abiFilters += "arm64-v8a"
}
create("x86") {
ndk.abiFilters += "x86"
}
create("x86-64") {
ndk.abiFilters += "x86_64"
}
create("mips") {
ndk.abiFilters += "mips"
}
create("mips-64") {
ndk.abiFilters += "mips64"
}
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
Android.mk
आप /app/src/main/jni
निर्देशिका के अंदर एक Android.mk
फ़ाइल की आवश्यकता होगी
LOCAL_PATH := $(call my-dir)
# Builds a dylib out of test.cpp
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
test.cpp
कुछ कमाल सी जोड़ें/सी ++ स्रोत कोड आपके lib के लिए। इन फ़ाइलों को /app/src/main/jni
में शुरू होगा और अपने Android.mk
उदाहरण के रूप में विनिर्दिष्ट फ़ाइल
#include <jni.h>
#include <android/log.h>
static const char *SOME_TAG = "MyAwesomeTag";
extern "C"
{
void
Java_com_something_something_1android_ClassName_some_fn(JNIEnv *env, jobject obj)
{
__android_log_print(ANDROID_LOG_VERBOSE, SOME_TAG, "Hello from NDK :)");
}
} // End extern
संकलित करें और रन संकलित और लिंक किया जाएगा।
क्या आप स्टूडियो 2.1 का उपयोग कर फ़ाइल बना सकते हैं? – Hunt