คำถามติดแท็ก android-ndk

Android Native Development Kit (NDK) เป็นเครื่องมือที่ใช้ร่วมกับ Android SDK ที่ช่วยสร้างส่วนที่สำคัญต่อประสิทธิภาพของแอปในโค้ดเนทีฟหรือพอร์ตไลบรารีที่มีอยู่ใน C / C ++ ไปยัง Android มีส่วนหัวและไลบรารีที่อนุญาตให้สร้างกิจกรรมจัดการอินพุตของผู้ใช้ใช้เซ็นเซอร์ฮาร์ดแวร์เข้าถึงทรัพยากรแอปพลิเคชันและอื่น ๆ เมื่อเขียนโปรแกรมใน C / C ++

1
จะมีผลต่อการสร้างรหัส Delphi XEx สำหรับเป้าหมาย Android / ARM อย่างไร
อัพเดท 2017-05-17 ฉันไม่ทำงานให้กับ บริษัท ที่มีคำถามนี้มาแล้วและไม่สามารถเข้าถึง Delphi XEx ได้ ในขณะที่ฉันอยู่ที่นั่นปัญหาได้รับการแก้ไขโดยการโยกย้ายไปยัง FPC + GCC (Pascal + C) ผสมกับ NEON อินทรินซินส์สำหรับกิจวัตรบางอย่างที่สร้างความแตกต่าง (แนะนำให้ใช้ FPC + GCC เพราะช่วยให้สามารถใช้เครื่องมือมาตรฐานโดยเฉพาะอย่างยิ่ง Valgrind) หากมีใครสามารถสาธิตด้วยตัวอย่างที่น่าเชื่อถือว่าจริง ๆ แล้วพวกเขาสามารถสร้างรหัส ARM ที่ดีที่สุดจาก Delphi XEx ได้อย่างไรฉันยินดีที่จะตอบ . คอมไพเลอร์ Delphi ของ Embarcadero ใช้แบ็กเอนด์ LLVM เพื่อสร้างรหัส ARM ดั้งเดิมสำหรับอุปกรณ์ Android ฉันมีรหัส Pascal จำนวนมากที่ฉันต้องรวบรวมในแอปพลิเคชัน Android และฉันต้องการทราบวิธีการทำให้ Delphi สร้างรหัสที่มีประสิทธิภาพมากขึ้น …

23
สัญญาณ Android ร้ายแรง 11 (SIGSEGV) ที่ 0x636f7d89 (รหัส = 1) จะติดตามได้อย่างไร?
ฉันได้อ่านโพสต์อื่น ๆ เกี่ยวกับการติดตามเหตุผลในการรับSIGSEGVแอพ Android ฉันวางแผนที่จะทำให้แอพของฉันเป็นไปได้สำหรับ NullPointers ที่เกี่ยวข้องกับการใช้งาน Canvas แต่SIGSEGVbarfs ของฉันใช้ที่อยู่หน่วยความจำที่แตกต่างกันในแต่ละครั้ง พลัสผมเคยเห็นและcode=1 code=2หากที่อยู่หน่วยความจำเป็น0x00000000ฉันจะมีเงื่อนงำมันเป็น NullPointer คนสุดท้ายที่ฉันได้คือcode=2: A/libc(4969): Fatal signal 11 (SIGSEGV) at 0x42a637d9 (code=2) มีข้อเสนอแนะเกี่ยวกับวิธีติดตามสิ่งนี้หรือไม่? ฉันมีผู้ต้องสงสัย แต่ฉันยังไม่กระตือรือร้นที่จะทดลองกับมัน แอพของฉันใช้ OSMDroid API สำหรับการทำแผนที่ออฟไลน์ คลาส OverlayItem แสดงถึงเครื่องหมาย / โหนดบนแผนที่ ฉันมีบริการที่รวบรวมข้อมูลผ่านเครือข่ายเพื่อเติมข้อมูล OverlayItem ซึ่งจะปรากฏบนแผนที่ ในความพยายามที่จะลดความซับซ้อนของการออกแบบของฉันฉันขยาย OverlayItem ลงในคลาส NodeOverlayItem ของฉันเองซึ่งรวมถึงคุณลักษณะเพิ่มเติมที่ฉันใช้ในกิจกรรม UI และในบริการ นี่เป็นจุดเดียวของข้อมูลรายการสำหรับ UI และบริการ ฉันใช้ Intents เพื่อออกอากาศไปยังกิจกรรมเพื่อรีเฟรชแผนที่ …

30
ข้อผิดพลาด: ไม่พบ Toolchains ในโฟลเดอร์ NDK toolchains สำหรับ ABI พร้อมคำนำหน้า: llvm
ฉันต้องการรวบรวมโครงการ Android โอเพ่นซอร์ส (Netguard) โดยใช้ gradel ( gradlew clean build) แต่ฉันพบข้อผิดพลาดนี้: A problem occurred configuring project ':app'. > Exception thrown while executing model rule: NdkComponentModelPlugin.Rules#cre ateToolchains > No toolchains found in the NDK toolchains folder for ABI with prefix: llvm ฉัน serached แต่ไม่พบความช่วยเหลือทุกสิ่ง นี่คือหลักbuild.gradle: buildscript { repositories { jcenter() } …

11
ฉันจะหา Android NDK รุ่นเก่าได้ที่ไหน [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ไม่มีใครรู้ว่าฉันสามารถหา Android NDK รุ่นเก่ากว่าได้ที่ไหน? รหัสของเราไม่ได้สร้างด้วย r6 แน่นอนต้องมีรุ่นที่เก็บถาวรบางแห่ง

23
สตูดิโอ Android, gradle และ NDK
ฉันยังใหม่ต่อการเรียนรู้ทั้งหมดและการสนับสนุน Android Studio ฉันได้ทำการแปลงโปรเจค Android ของฉันเพื่อไล่ระดับโดยใช้ตัวเลือกการส่งออก แต่ฉันกำลังมองหาเอกสารบางอย่างหรือจุดเริ่มต้นวิธีรวม NDK build เข้ากับกระบวนการสร้าง gradle ถ้าเป็นไปได้ฉันต้องการลำดับ "หลัง" ที่คัดลอกไบนารีการสร้าง (ไฟล์. so) ไปยังไดเรกทอรีสินทรัพย์

3
ทำไมต้องใช้รหัส armeabi-v7a มากกว่ารหัส armeabi?
ในโครงการปัจจุบันของฉันฉันใช้ประโยชน์จากไฟล์. so หลายไฟล์ เหล่านี้ตั้งอยู่ที่โฟลเดอร์ armeabi และ armeabi-v7a น่าเสียดายที่ไฟล์. so หนึ่งไฟล์เป็น 6MB และฉันต้องการลดขนาดไฟล์ แทนที่จะมีไฟล์ APK ที่มีไขมันฉันต้องการใช้ไฟล์ armeabi และลบโฟลเดอร์ armeabi-v7a ตามเอกสาร NDK รหัส armeabi-v7a ได้รับการขยายรหัส armeabi ซึ่งสามารถมีคำสั่ง CPU เพิ่มเติม ทั้งหมดนี้นอกเหนือไปจากความเชี่ยวชาญของฉัน แต่ฉันถามว่าทำไมจึงมีรหัส armeabi-v7a และ armeabi ต้องมีเหตุผลที่ดีที่จะมีทั้งคู่ใช่มั้ย ในอุปกรณ์ทดสอบของฉันทั้งหมดนี้ดูเหมือนจะทำงานได้ดี สิ่งเหล่านี้มีซีพียู ARM v7 ปลอดภัยไหมที่จะคิดว่าทุกอย่างใช้งานได้ในตอนนี้?

30
java.lang.ClassNotFoundException: ไม่พบคลาสบนเส้นทาง: dexpathlist
ขณะนี้ฉันกำลังทำงานในโครงการที่ฉันต้องใช้ ndk ดั้งเดิม มันทำงานได้เมื่อฉันลองใช้ตัวอย่าง helloworld จากแหล่งเครื่องยนต์ของ Irrlicht จากนั้นฉันลองใช้มันในโครงการของฉันตามรูปแบบเดียวกันของตัวอย่างนั้น แต่ฉันได้: 03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]] ในขณะที่เรียกใช้โครงการของฉัน นี่คือไฟล์ main.cpp ของฉัน: #include <android/log.h> #include <jni.h> #include <android_native_app_glue.h> #include "android_tools.h" #ifdef _IRR_ANDROID_PLATFORM_ void android_main(android_app* app) { __android_log_print(4 , "pom" …
140 java  android  c++  android-ndk 

30
ผลลัพธ์ความละเอียด NDK: การตั้งค่าโครงการ: รุ่น Gradle model = 5.4.1, เวอร์ชัน NDK เป็นข้อผิดพลาด UNKNOWN
หลังจากอัปเดต Android Studio และ Gradle เป็น 3.5 ตอนนี้ฉันได้รับข้อผิดพลาดนี้: ผลลัพธ์ความละเอียด NDK: การตั้งค่าโปรเจ็กต์: รุ่น Gradle model = 5.4.1, เวอร์ชัน NDK ไม่ทราบ ฉันเปลี่ยนเวอร์ชัน Gradle ใน build-gradle กลับเป็น 3.4.2 แต่ก็ไม่ได้ช่วยอะไร

15
การอ้างอิงที่ไม่ได้กำหนดถึง `__android_log_print '
ไฟล์ make ของฉันมีอะไรผิดปกติ Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := foo LOCAL_SRC_FILES := foo.c LOCAL_EXPORT_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) foo.c #include <string.h> #include <jni.h> #include <android/log.h> #define LOG_TAG "foo" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) void test() { LOGI("test"); } ndk-build foo.c:9: undefined reference to `__android_log_print'

5
กำลังเรียกใช้ Node.js บน Android
ดังนั้นฉันรู้ว่าเรื่องนี้ถูกตั้งคำถามค่อนข้างมาก เพื่อให้ถูกต้องเช่นในคำถามเหล่านี้: เรียกใช้เซิร์ฟเวอร์ NodeJs ใน Android จะรันโปรเจ็กต์ node.js บน Android ได้อย่างไร และ NodeJS บน IOS / Android ทุกตัวเลือกที่นำเสนอมีปัญหาแม้ว่า: ฉันต้องการเรียกใช้บนอุปกรณ์ปกติของฉันดังนั้นฉันจึงต้องการหลีกเลี่ยงการติดตั้งระบบปฏิบัติการอื่นบนอุปกรณ์ของฉัน การทำงานกับ JXCore หยุดลงเมื่อเดือนที่แล้วและ (อาจเป็นผล) ฉันไม่สามารถรวบรวมได้ (ดูไม่สามารถติดตั้ง jxcore-cordova ) พอร์ต Android ของ NodeJs Anodeไม่ได้ใช้งานมาตั้งแต่ปี 2014 และไม่ได้รับการบำรุงรักษาเลย คำตอบที่สองในเธรดที่สองที่ฉันเชื่อมโยงกล่าวถึงมีการแจกจ่ายโหนดอย่างเป็นทางการสำหรับ Android ในขณะนี้ แต่นอกเหนือจากลิงก์ไปยังเว็บไซต์เรียกดูของ dist ล่าสุดฉันไม่พบข้อมูลใด ๆ เกี่ยวกับวิธีการใช้งานจริง ฉันเห็นสิ่งนี้ด้วยแต่ดูเหมือนว่าอุปกรณ์จะต้องเชื่อมต่อกับพีซี (หรือคล้ายกัน) เพื่อเรียกใช้คำสั่ง adb shell ในขณะที่ฉันต้องการทำให้เป็นแอปแยกต่างหาก ด้วยเวลาที่ผ่านมานับตั้งแต่มีการโพสต์คำถามเหล่านี้และดูเหมือนว่า JXCore …

2
การเรียกใช้วิธี java จาก c ++ ใน Android
ฉันพยายามเรียกเมธอด Java ง่ายๆจาก C ++ ในขณะที่ Java เรียกวิธีเนทีฟ นี่คือรหัส Java: public class MainActivity extends Activity { private static String LIB_NAME = "name"; static { System.loadLibrary(LIB_NAME); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.textview); tv.setText(this.getJniString()); } …

13
System.loadLibrary (…) ไม่พบไลบรารีเนทีฟในกรณีของฉัน
ฉันต้องการใช้ไลบรารีเนทีฟที่มีอยู่จากโปรเจ็กต์ Android อื่นดังนั้นฉันเพิ่งคัดลอกไลบรารีที่สร้างขึ้น NDK ( libcalculate.so ) ไปยังโปรเจ็กต์ Android ใหม่ของฉัน ในโครงการ Android ใหม่ของฉันฉันสร้างโฟลเดอร์libs/armeabi/และวางlibcalculate.soไว้ที่นั่น นอกจากนี้ไม่มี JNI / โฟลเดอร์ อุปกรณ์ทดสอบของฉันมีสถาปัตยกรรม ARM ในรหัส java ของฉันฉันโหลดไลบรารีโดย: static{ System.loadLibrary("calculate"); } เมื่อฉันเรียกใช้โครงการ Android ใหม่ฉันได้รับข้อผิดพลาด: java.lang.UnsatisfiedLinkError: ... nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so" ดังนั้นตามที่ระบุข้อผิดพลาดไลบรารีเนทีฟที่คัดลอกไม่ได้อยู่ใน / verdor / lib หรือ / system / lib จะแก้ไขปัญหานี้ในกรณีของฉันได้อย่างไร (ฉันคลายซิปแพ็คเกจ apk ภายใต้ lib …

4
ฉันจะตรวจจับ SIGSEGV (ข้อผิดพลาดในการแบ่งส่วน) และรับสแต็กติดตามภายใต้ JNI บน Android ได้อย่างไร
ฉันกำลังย้ายโปรเจ็กต์ไปยัง Android Native Development Kit (เช่น JNI) และฉันต้องการจับ SIGSEGV หากเกิดขึ้น (อาจเป็น SIGILL, SIGABRT, SIGFPE) เพื่อนำเสนอกล่องโต้ตอบการรายงานข้อขัดข้องที่ดีแทน (หรือก่อนหน้า) สิ่งที่เกิดขึ้นในปัจจุบัน: การเสียชีวิตอย่างไม่เป็นโรคในทันทีของกระบวนการและระบบปฏิบัติการอาจพยายามเริ่มต้นใหม่ ( แก้ไข: JVM / Dalvik VM จับสัญญาณและบันทึกการติดตามสแต็กและข้อมูลที่เป็นประโยชน์อื่น ๆ ฉันแค่ต้องการเสนอตัวเลือกให้ผู้ใช้ส่งอีเมลข้อมูลนั้นให้ฉันจริงๆ) สถานการณ์คือโค้ด C ขนาดใหญ่ที่ฉันไม่ได้เขียนทำงานส่วนใหญ่ในแอปพลิเคชันนี้ (ตรรกะของเกมทั้งหมด) และแม้ว่าจะผ่านการทดสอบอย่างดีบนแพลตฟอร์มอื่น ๆ มากมาย แต่ก็เป็นไปได้ทั้งหมดที่ฉันใน Android ของฉัน พอร์ตจะป้อนขยะและทำให้เกิดข้อผิดพลาดในโค้ดเนทีฟดังนั้นฉันต้องการให้การถ่ายโอนความผิดพลาด (ทั้งเนทีฟและ Java) ที่แสดงในบันทึกของ Android (ฉันเดาว่ามันน่าจะเป็น stderr ในสถานการณ์ที่ไม่ใช่ Android) ฉันมีอิสระที่จะแก้ไขทั้งรหัส C และ Java …

3
อะไรทำให้เกิดสัญญาณ 'SIGILL'
ฉันกำลังโอนรหัส C ++ ไปยัง Android โดยใช้ NDK และ GCC โดยทั่วไปโค้ดจะทำงาน จนถึงจุดหนึ่งเมื่อทำการดีบักใน Eclipse การเรียกใช้ Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory; ทำให้เกิดข้อผิดพลาดนี้: Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.) 1 <symbol is not available> 0x812feb44 นั่นหมายความว่าอย่างไร? คอมไพเลอร์สร้างรหัสที่ผิดกฎหมายด้วยเหตุผลบางประการหรือไม่? ฉันมีเบรกพอยต์ในตัวสร้าง (ซึ่งไม่ทำอะไรเลย) และมันไม่โดน ฉันได้ทำการสร้างใหม่ทั้งหมดแล้ว ฉันทำอะไรผิดที่ทำให้เกิดปัญหานี้

4
หลังจากอัปเดต Android Studio เป็นเวอร์ชัน 1.3.0 ฉันได้รับข้อผิดพลาด "การรวม NDK เลิกใช้งานในปลั๊กอินปัจจุบัน"
ฉันได้อัปเดต Android Studio เป็นเวอร์ชัน1.3.0ก่อน 3 วัน ก่อนหน้านั้นฉันสามารถใช้ NDK ได้และตอนนี้ฉันได้รับข้อผิดพลาดเช่น ข้อผิดพลาด: (50, 0) ข้อผิดพลาด: การรวม NDK เลิกใช้งานในปลั๊กอินปัจจุบัน ลองใช้ปลั๊กอินทดลองใหม่ ดูรายละเอียดhttp://tools.android.com/tech-docs/new-build-system/gradle-experimental ตั้งค่า "android.useDeprecatedNdk = true" ใน gradle.properties เพื่อใช้การรวม NDK ปัจจุบันต่อไป ฉันไม่พบไฟล์ gradle.property ที่ระดับโปรเจ็กต์ ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.