android - ओपनकास्केड एंड्रॉइड स्टूडियो
android-ndk jni (1)
ओपन कैस्केड किसी अनुप्रयोग के निर्माण के लिए कोई भी बायनेरिज़ प्रदान नहीं करता है। अपना खुद का बनाएँ। विंडोज ओएस में एंड्रॉइड के लिए बायनेरिज़ फ़ाइल:
- ध्यान से दिए गए चरणों का पालन करें Android के लिए CMake के साथ बिल्डिंग
- ओपन कैसकेड इंस्टॉलर के साथ आने वाले केवल
Freetype
उपयोग करें इस नमूने के लिएFreeImage
और अन्य की आवश्यकता नहीं है। - सफल कॉन्फ़िगरेशन और सीमके फाइलों के निर्माण के बाद चरण 1 यूआरएल का पालन करें।
एंड्रॉइड के लिए द्विआधारी फाइलों को बनाने के दौरान कई समस्याएँ आ जाएंगी। नीचे चाल का पालन करें:
ए।
declspec(dllexport) x
से संबंधित त्रुटि यह 3 पार्टी लाइब्रेरी फ़्रीटाइप में आता है जो ओसीसी के अंदरfreetype-xxx/include/config/ftoption.h
। यह त्रुटि में दी गई लाइन संख्या (282 यदि ओसीसी 7.0.0 का उपयोग किया जाता है) को#define FT_EXPORT_DEF(x) x
करके और#define FT_EXPORT_DEF(x) x
को उसके स्थान पर दर्ज करके इसका समाधान किया जा सकता हैख। फिर से निर्माण शुरू करने के लिए मेक कमांड का उपयोग करें
सी।
freetype-xx/lib
मेंfreetype-xx/lib
। LibEGL.so से..\android-ndk\platforms\android-xx\arch-arm\usr\lib
कॉपी करें और इसेfreetype-xx/lib
में पेस्ट करें।घ। चरण 1 में दिए गए सीमके आउटपुट फ़ोल्डर के लिए ओपन इंक फ़ोल्डर। में सामग्री को कॉपी करें
..\android-ndk\platforms\android-xx\arch-arm\usr\include
कदम 4.b का पालन करें
नोट : एंड्रॉइड-एक्सएक्स ANDROID_NATIVE_API_LEVEL पर निर्भर करता है यह एंड्रॉइड -15 हो सकता है
- यदि कोई त्रुटियां नहीं हैं, तो चरण 1 यूआरएल का पालन करना जारी रखें।
- सफल अधिष्ठापन के बाद, सीमैके आउटपुट डायरेक्टरी पर जाएँ और किसी भी सबफ़ोल्डर्स (लिन 32 / जीसीसी / लिब हो सकता है) में लिब फ़ोल्डर की तलाश करें। लिब फ़ोल्डर के अंदर सभी आवश्यक बाइनरी फाइलें होनी चाहिए।
- मैंने बाइनरी बनाई है यहां से डाउनलोड करें और प्रोजेक्ट में
jnilibs
फ़ोल्डर में बाइनरी कॉपी करें। - फ़्रीटीप के अलावा कोई अन्य तृतीय पक्ष पुस्तकालय की आवश्यकता नहीं है।
अब सवाल पर वापस आ रहे हैं - एक बाहरी बाइनरी के रूप में जोड़ने के लिए gnustl_shared
को gnustl_shared
नहीं किया गया है
app\build.gradle
अंदर app\build.gradle
कोड नीचे का उपयोग करें
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 24
buildToolsVersion = "24.0.2"
defaultConfig.with {
applicationId = "com.occ_poc_as"
minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel = 24
versionCode = 1
versionName = "1.0"
}
buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-android.txt'))
}
}
ndk {
moduleName = "OcctJni_Viewer"
cppFlags.add("-I${file(getOpenCascadeDir())}".toString())
cppFlags.add("-frtti")
cppFlags.add("-fexceptions")
stl = "gnustl_shared"
toolchain = 'clang'
ldLibs.addAll(['android', 'log', 'EGL', 'GLESv2'])
cppFlags.addAll(['-Wall', '-std=c++11'])
CFlags.addAll(['-Wall', '-std=c++11'])
}
productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm7") {
ndk.with {
abiFilters.add("armeabi-v7a")
ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString())
File curDir = file('./')
curDir = file(curDir.absolutePath)
String libsDir = curDir.absolutePath + "\\src\\main\\jniLibs\\armeabi-v7a\\"
ldLibs.add(libsDir + "libfreetype.so")
ldLibs.add(libsDir + "libTKBRep.so")
ldLibs.add(libsDir + "libTKernel.so")
ldLibs.add(libsDir + "libTKG2d.so")
ldLibs.add(libsDir + "libTKG3d.so")
ldLibs.add(libsDir + "libTKGeomAlgo.so")
ldLibs.add(libsDir + "libTKGeomBase.so")
ldLibs.add(libsDir + "libTKMath.so")
ldLibs.add(libsDir + "libTKPrim.so")
ldLibs.add(libsDir + "libTKTopAlgo.so")
ldLibs.add(libsDir + "libTKBO.so")
ldLibs.add(libsDir + "libTKBool.so")
ldLibs.add(libsDir + "libTKFillet.so")
ldLibs.add(libsDir + "libTKHLR.so")
ldLibs.add(libsDir + "libTKIGES.so")
ldLibs.add(libsDir + "libTKMesh.so")
ldLibs.add(libsDir + "libTKOffset.so")
ldLibs.add(libsDir + "libTKOpenGl.so")
ldLibs.add(libsDir + "libTKService.so")
ldLibs.add(libsDir + "libTKShHealing.so")
ldLibs.add(libsDir + "libTKSTEP.so")
ldLibs.add(libsDir + "libTKSTEP209.so")
ldLibs.add(libsDir + "libTKSTEPAttr.so")
ldLibs.add(libsDir + "libTKSTEPBase.so")
ldLibs.add(libsDir + "libTKV3d.so")
ldLibs.add(libsDir + "libTKXSBase.so")
}
}
}
}
}
def getOpenCascadeDir() {
Properties properties = new Properties()
properties.load(new File(rootDir.absolutePath + "/local.properties").newDataInputStream())
def externalModuleDir = properties.getProperty('occ.dir', null)
if (externalModuleDir == null) {
throw new GradleException(
"OpenCascade location not found. Define location with occ.dir in the local.properties file!")
}
return externalModuleDir
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar', '.so'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.0'
}
अंदर local.properties
। local.properties
नीचे स्निपेट्स जोड़ें
sdk.dir=D\:\\Software\\android_sdk
ndk.dir=D\:\\Software\\android-ndk-r12b-windows-x86_64\\android-ndk-r12b
occ.dir=D\:\\Workspace\\OCCT\\inc
OcctJniActivity.java
लिए OcctJniActivity.java
हटा freeimage
। TKJniSample
को TKJniSample
साथ बदलें
// application code
|| !loadLibVerbose ("OcctJni_Viewer", aLoaded, aFailed))
नोट :
नमूना के लिए नवीनतम क्राउडेल प्रयोग का प्रयोग करें।
Assest फ़ोल्डर में शेडर जोड़ने के लिए मत भूलना। इस नमूने के लिए दूसरों की आवश्यकता नहीं है
मैंने ओसीसी 7.0.0 और नवीनतम एंड्रॉइड स्टूडियो का उपयोग किया है।
मैं स्रोत कोड और ओसीसी / शामिल फ़ोल्डर संलग्न कर रहा हूँ
मैं नीचे यूआरएल की सहायता से ओपनसीस्कड पर एंड्रॉइड एप्लीकेशन बनाने की कोशिश कर रहा हूं I
http://www.opencascade.com/doc/occt-7.0.0/overview/html/samples_java_android_occt.html
सब कुछ ठीक काम करता है सिवाय मैं नीचे त्रुटियों में फंस गया हूँ:
07-12 17:13:09.711: E/occtJniViewer(16333): Error: native library "gnustl_shared" is unavailable:
07-12 17:13:09.711: E/occtJniViewer(16333): dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.opencascade.jnisample-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libgnustl_shared.so"
Error: native library "freetype" is unavailable:
07-12 17:13:09.711: E/occtJniViewer(16333): dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.opencascade.jnisample-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libfreetype.so"
Error: native library "freeimage" is unavailable:
07-12 17:13:09.711: E/occtJniViewer(16333): dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.opencascade.jnisample-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libfreeimage.so"
Error: native library "TKernel" is unavailable:
07-12 17:13:09.711: E/occtJniViewer(16333): dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.opencascade.jnisample-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libTKernel.so"
मैं gnustl_shared
पुस्तकालय और अन्य .so files
को जोड़ने में सक्षम नहीं हूँ कृपया उपरोक्त लिंक के रूप में कदमों का सुझाव दें इनके बारे में अधिक विवरण प्रदान नहीं किया गया है।
कोई मदद महान सहायता का होगी धन्यवाद।