2015-03-03 10 views
5

मैं एक्लिप्स से एंड्रॉइड स्टूडियो तक एक एंड्रॉइड लाइब्रेरी माइग्रेट करने की प्रक्रिया में हूं। ग्रहण में मैं परियोजना> गुण> संसाधन> लिंक किए गए संसाधन> पथ चर के माध्यम से NDK_MODULE_PATH सेट कर सकता था। लेकिन मैं एंड्रॉइड स्टूडियो में क्रमशः क्रमशः एक ही चीज़ कैसे प्राप्त करूं?एंड्रॉइड स्टूडियो और/या ग्रेडल में NDK_MODULE_PATH कैसे सेट करें?

मेरी लाइब्रेरी तब तक बनती है जब तक कि वह एनडीके_MओDULE_PATH के तहत मॉड्यूल के लिए हेडर ढूंढने का प्रयास नहीं करता।

 
Executing tasks: [:libAndroid:compileDebugSources, :physicaloidLibrary:compileDebugSources] 

Configuration on demand is an incubating feature. 
:libAndroid:preBuild UP-TO-DATE 
:libAndroid:preDebugBuild UP-TO-DATE 
:libAndroid:checkDebugManifest 
:libAndroid:preDebugAndroidTestBuild UP-TO-DATE 
:libAndroid:preReleaseBuild UP-TO-DATE 
:physicaloidLibrary:compileLint 
:physicaloidLibrary:copyReleaseLint UP-TO-DATE 
:physicaloidLibrary:mergeReleaseProguardFiles UP-TO-DATE 
:physicaloidLibrary:preBuild UP-TO-DATE 
:physicaloidLibrary:preReleaseBuild UP-TO-DATE 
:physicaloidLibrary:checkReleaseManifest 
:physicaloidLibrary:prepareReleaseDependencies 
:physicaloidLibrary:compileReleaseAidl UP-TO-DATE 
:physicaloidLibrary:compileReleaseRenderscript UP-TO-DATE 
:physicaloidLibrary:generateReleaseBuildConfig UP-TO-DATE 
:physicaloidLibrary:generateReleaseAssets UP-TO-DATE 
:physicaloidLibrary:mergeReleaseAssets UP-TO-DATE 
:physicaloidLibrary:generateReleaseResValues UP-TO-DATE 
:physicaloidLibrary:generateReleaseResources UP-TO-DATE 
:physicaloidLibrary:packageReleaseResources UP-TO-DATE 
:physicaloidLibrary:processReleaseManifest UP-TO-DATE 
:physicaloidLibrary:processReleaseResources UP-TO-DATE 
:physicaloidLibrary:generateReleaseSources UP-TO-DATE 
:physicaloidLibrary:compileReleaseJava UP-TO-DATE 
:physicaloidLibrary:processReleaseJavaRes UP-TO-DATE 
:physicaloidLibrary:packageReleaseJar UP-TO-DATE 
:physicaloidLibrary:compileReleaseNdk UP-TO-DATE 
:physicaloidLibrary:packageReleaseJniLibs UP-TO-DATE 
:physicaloidLibrary:packageReleaseLocalJar UP-TO-DATE 
:physicaloidLibrary:packageReleaseRenderscript UP-TO-DATE 
:physicaloidLibrary:bundleRelease UP-TO-DATE 
:libAndroid:prepareLibAndroidGradlePhysicaloidLibraryUnspecifiedLibrary UP-TO-DATE 
:libAndroid:prepareDebugDependencies 
:libAndroid:compileDebugAidl UP-TO-DATE 
:libAndroid:compileDebugRenderscript UP-TO-DATE 
:libAndroid:generateDebugBuildConfig UP-TO-DATE 
:libAndroid:generateDebugAssets UP-TO-DATE 
:libAndroid:mergeDebugAssets UP-TO-DATE 
:libAndroid:generateDebugResValues UP-TO-DATE 
:libAndroid:generateDebugResources UP-TO-DATE 
:libAndroid:mergeDebugResources UP-TO-DATE 
:libAndroid:processDebugManifest UP-TO-DATE 
:libAndroid:processDebugResources UP-TO-DATE 
:libAndroid:generateDebugSources UP-TO-DATE 
:libAndroid:compileDebugJava UP-TO-DATE 
:libAndroid:compileDebugNdk 
AGPBI: {"kind":"SIMPLE","text":"/home/rhodo/dev/android/studio/LibAndroidGradle/libAndroid/src/main/jni/imageprocessing/dmtxutil.c:30:18: fatal error: dmtx.h: No such file or directory","position":{},"original":"/home/rhodo/dev/android/studio/LibAndroidGradle/libAndroid/src/main/jni/imageprocessing/dmtxutil.c:30:18: fatal error: dmtx.h: No such file or directory"} 
AGPBI: {"kind":"SIMPLE","text":" #include \u003cdmtx.h\u003e","position":{},"original":" #include \u003cdmtx.h\u003e"} 
AGPBI: {"kind":"SIMPLE","text":"     ^","position":{},"original":"     ^"} 
AGPBI: {"kind":"SIMPLE","text":"compilation terminated.","position":{},"original":"compilation terminated."} 
AGPBI: {"kind":"SIMPLE","text":"make: *** [/home/rhodo/dev/android/studio/LibAndroidGradle/libAndroid/build/intermediates/ndk/debug/obj/local/arm64-v8a/objs/Rhodo//home/rhodo/dev/android/studio/LibAndroidGradle/libAndroid/src/main/jni/imageprocessing/dmtxutil.o] Error 1","position":{},"original":"make: *** [/home/rhodo/dev/android/studio/LibAndroidGradle/libAndroid/build/intermediates/ndk/debug/obj/local/arm64-v8a/objs/Rhodo//home/rhodo/dev/android/studio/LibAndroidGradle/libAndroid/src/main/jni/imageprocessing/dmtxutil.o] Error 1"} 


FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':libAndroid:compileDebugNdk'. 
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/opt/android-ndk/ndk-build'' finished with non-zero exit value 2 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

Total time: 2.763 secs 

इस पर कोई भी विचार:

यहाँ त्रुटि संदेश है?

उत्तर

-1

एंड्रॉइड स्टूडियो प्रोजेक्ट की जड़ पर, "local.properties" नामक एक फ़ाइल है। "Ndk.dir" नाम की एक संपत्ति जोड़ें और ndk के स्थान पर इंगित करने के लिए मान सेट करें। निम्न की तरह कुछ:

ndk.dir=/Users/username/sdk 

मैं आपके प्रश्न को समझ नहीं सकता। यदि आप पहले ही एनएनडीके का स्थान निर्धारित कर चुके हैं और बस यह सुनिश्चित करना चाहते हैं कि एक मॉड्यूल बनाया जाए तो मॉड्यूल को "settings.gradle" फ़ाइल में जोड़ें।

include ":<your module name>" 

तो सुनिश्चित करें कि आप मॉड्यूल में "src/मुख्य/JNI" में सी कोड डाल सकते हैं। ग्रैडल स्वचालित रूप से फ़ोल्डर नाम के आधार पर पायेगा। अब NDK_MODULE_PATH सेट करने की आवश्यकता नहीं है।

+0

मुझे लगता है कि आपको सही मिला है, लेकिन केवल यह स्पष्ट करने के लिए: "मॉड्यूल" शब्द के विभिन्न उपयोग, $ NDK_MODULE_PATH के तहत एक मॉड्यूल एक सी/सी ++ मॉड्यूल/लाइब्रेरी है। मैंने अपनी लाइब्रेरी प्रोजेक्ट में एक ग्रेडल मॉड्यूल बनाया है। लेकिन फिर "एंड्रॉइड.एमके" मेकफ़ाइल को नजरअंदाज कर दिया जाता है। इस विषय से संबंधित इंटरनेट में कई पोस्ट हैं। लेकिन अगर कोई इन मेकफ़ाइल पर निर्भर करता है, तो सी/सी ++ लाइब्रेरी का निर्माण सफल नहीं हो सकता है। उदा। "libdmtx": मुझे केवल मेकफ़ाइल में "dmtx.c" जोड़ने की आवश्यकता है और यह सफलतापूर्वक बनाता है। मेकफ़ाइल के बिना ndk-build प्रत्येक फ़ाइल को बनाने की कोशिश करता है जो फ़ोल्डर और बिल्ड विफल रहता है। – rhodo

0

का उपयोग करना:

  • Gradle संस्करण: 3.3
  • एंड्रॉयड प्लगइन संस्करण: com.android.tools.build:gradle:2.3.1

यह मेरे लिए काम करता है:

android { 

    ... 

    defaultConfig { 

     ... 

     ndk { 
      abiFilters 'armeabi', 'armeabi-v7a' 
     } 

     externalNativeBuild { 
      ndkBuild { 
       // TODO replace jniDependencies folder with the path to your modules 
       arguments "NDK_MODULE_PATH:=${rootProject.projectDir}/jniDependencies" 
      } 
     } 
    } 

    externalNativeBuild { 
     ndkBuild { 
      path 'src/main/jni/Android.mk' 
     } 
    } 


} 

इस तरह से मुझे परियोजना बनाने के लिए अपने पथ में NDK_MODULE_PATH जोड़ने की आवश्यकता नहीं है। हालांकि, यह साफ कार्य विफल रहता है, क्योंकि इससे यहां तर्क नहीं उठाया जाएगा, इसलिए मुझे इसे ठीक करने के लिए एक और हैक जोड़ने की आवश्यकता है:

tasks.withType(com.android.build.gradle.tasks.ExternalNativeCleanTask) { 
    it.actions.clear() 

    doLast { 
     project.delete("${projectDir}/.externalNativeBuild") 
    } 
} 
संबंधित मुद्दे