Articles of android ndk

ICS上的本机堆栈跟踪?

由于某种原因,我不能在我这里的ICS设备上发生本地(C / C ++)地址/堆栈跟踪。 在我的Nexus 7上,当本机库崩溃时,不会输出任何内容。 通过/system/default.prop和/data/local.prop设置时, log.redirect-stdio设置为1,两者都/data/local.prop 。 我尝试使用stop , setprop , start命令将log.redirect-stdio设置为true ,但仍未向logcat输出本机stacktrace。 谷歌我的意思是来吧……我每天都因为与我的错误,不可预测的关系而对Google产生越来越多的信心。

尝试访问USB设备时libusb_open_device_with_vid_pid失败

我正在尝试将USB设备连接到Android 5.1.1设备。 以前我一直在使用常规的libusb for KitKat,但Lollipop增加了安全性,这不再适用。 这是有据可查的,需要root来设置SELinux级别。 我不想让设备生根以使USB设备连接到它。 环顾四周,我遇到了这个答案 ,我尝试了这个libusb fork ,但是现在我遇到了一个新的错误 libusb_open_device_with_vid_pid (29c2) failed. Failed to setup USB usb_setup: -1 我没有更改任何代码,只有库。 这仍然是一个许可问题,或者是否有一些我想念的东西会使这个工作?

在外部目录上进行Nexus 9 SQLite文件写入操作的解决方法?

我的团队在Nexus 9上发现了一个错误,我们的应用程序无法使用,因为它无法在外部文件目录上以可写模式访问数据库。 似乎只有在应用程序使用JNI时才会发生,并且只有在代码中不包含arm64-v8a版本时才会发生。 我们目前的理论是,如果不包括arm64-v8a,Nexus 9包含一些替代版本的本机库,以便向后兼容只有armeabi或armeabi-v7a库的应用程序。 似乎某些备用SQLite库中存在一个阻止上述操作的错误。 有没有人find解决此问题的方法? 重新构建arm64中的所有本地库是我们当前的轨道和最完整的解决方案,但这需要我们的时间(我们的一些库是外部的),如果可能的话,我们希望更快地解决我们的Nexus 9用户的应用程序。 您可以通过这个简单的示例项目轻松地看到此问题(您需要最新的Android NDK )。 将以下文件添加到项目中。 如果您没有安装最新的Android NDK ,请安装它。 在项目目录中运行ndk-build 。 刷新,构建,安装和运行。 如果更改Android.mk或Application.mk,请在再次运行ndk-build之前删除libs和obj文件夹来清理项目。 您还需要在每次ndk-build之后手动刷新项目。 请注意,Nexus 9上的“损坏”构建仍然适用于内部文件,但不适用于外部文件。 SRC / COM /示例/ dbtester / DBTesterActivity.java package com.example.dbtester; import java.io.File; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class DBTesterActivity […]

armeabi和armeabi-v7a之间的区别

据我所知,文档中Android NDK中两种支持的ARM体系结构之间的区别仅在于支持的CPU指令集。 真的是这样吗? 调用约定,系统调用序列或其他内容没有区别吗? 我想知道如果我将模块编译为ARM对象文件(使用NDK以外的编译器 – 特别是Free Pascal),将ARMv6指定为架构,然后将其链接到armeabi和armeabi-v7a共享库,将会发生什么。 除了通过我自己的基于C的接口之外,FPC位不应该执行系统调用和Java调用。 编辑:一个hello world库,使用FPC for ARM编译,链接并在ARMv7a仿真器下运行。

如何在Android中启用A2DP接收器function?

我正在开发一个使用Gingerbread 2.3.4作为操作系统的定制嵌入式设备。 现在,该设备应该能够播放来自其他支持A2DP的设备(如iPhone或其他Android设备)的音频流。 我知道Gingerbread包含Bluez stack 4.69,它具有A2DP接收器function。 但是,我怀疑Android是否公开了这些API。 您对我如何实现此function有任何想法吗? 由于我没有开发通用的Android应用程序,任何种类的非标准方法都将受到赞赏。 我认为即使在Android中也可以通过DBus接口直接访问Bluez堆栈。

模拟电源按钮按下以显示关闭对话框

我正在尝试调用按下电源按钮时出现的关闭对话框。 但我想从Android应用程序或Junit测试用例中完成此任务。 在这种情况下,我会选择最可行的方法。 我一直试图这样做,但未能成功。 我试图使用以下五种方法: 第一种方法: long eventTime = SystemClock.uptimeMillis(); boolean dispateched = launcherButtonWInst.dispatchKeyEvent(new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POWER, 0, 0, 0, 0, 0) ); Log.i(LOG_TAG,String.valueOf(dispateched)); boolean dispateched2=launcherButtonWInst.dispatchKeyEvent(new KeyEvent(eventTime+2000, eventTime+2000, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_POWER, 0, 0, 0, 0, 0) ); Log.i(LOG_TAG,String.valueOf(dispateched2)); ================================================== ===== 第二个apporach: private void generateKeys() { // Obtain the WindowManager system service interface IBinder wmbinder = […]

ldd相当于android

我有一个libTest.so,在某些设备上没有加载。 logcat绝对没用。 使用arm-linux-androideabi-readelf.exe -d libTest.so我能够看到libTest.so所需的所有必需库。 我将它们全部拉进我本地PC上的同一个文件夹中。 如何找出哪些符号丢失以及哪个库? 我只有NDK的标准工具集(nm,readelf,objdump等)。 哪个工具以及如何使用它以便它解析我的libTest.so和所有依赖的libs并告诉我哪个符号阻止我的lib加载到目标设备上。

Android NDK中的链接器错误(未定义引用`__cxa_end_cleanup’)

在从同事添加一组代码后我得到了这个输出: ./obj/local/armeabi/objs/jniWrapper/native.o: In function `_Vector_base’: D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_vector.h:73: undefined reference to `__cxa_end_cleanup’ ./obj/local/armeabi/objs/jniWrapper/native.o:(.ARM.extab.text._ZNSt6vectorIhSaIhEEC1ERKS1_[std::vector<unsigned char, std::allocator >::vector(std::vector<unsigned char, std::allocator > const&)]+0x0): undefined reference to `__gxx_personality_v0′ ./obj/local/armeabi/objs/jniWrapper/native.o: In function `std::__node_alloc::deallocate(void*, unsigned int)’: D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_alloc.h:161: undefined reference to `__cxa_end_cleanup’ ./obj/local/armeabi/objs/jniWrapper/native.o:(.ARM.extab.text._ZNSt4priv12_String_baseIcSaIcEED2Ev[std::priv::_String_base<char, std::allocator >::~_String_base()]+0x0): undefined reference to `__gxx_personality_v0′ ./obj/local/armeabi/objs/jniWrapper/native.o: In function `basic_string’: D:/opt/android-ndk/sources/cxx-stl/stlport/stlport/stl/_string.c:643: undefined reference to `__cxa_end_cleanup’ 这是因为我无法访问正确的STL。 据我所知,我只能选择三个( stlport_static , stlport_shared , […]

Android NDK / JNI – 对自定义头文件中定义的函数的未定义引用

使用JNI,我正在尝试为Android NDK编写一个本机C ++方法,该方法调用自定义头文件中定义的C函数。 但是,我的C函数调用收到了一个未定义的引用错误。 这是我的C ++代码,它调用C函数并将其结果作为jstring返回给Java: #include #include “gesture_detector.h” JNIEXPORT jstring JNICALL Java_com_example_bmtitest_JavaAbstractionLayer_callGestureAnalysis(JNIEnv *env, jobject obj, jfloat previousX, jfloat previousY, jfloat currentX, jfloat currentY) { return env->NewStringUTF(gestureAnalysis(previousX, previousY, currentX, currentY)); } 这是我的C函数: #include #include “gesture_detector.h” //implemented from gesture_detector.h const char* gestureAnalysis(float previousX, float previousY, float currentX, float currentY) { float xOffset = currentX – previousX; […]

“无法在cocos2dx应用程序中find导入路径中带有’CocosDenshion / android’标签的模块”错误

我正在尝试编译在cocos2d-x上开发的Android本机应用程序。 当我尝试调试我的应用程序时,我收到以下错误。 Android NDK: jni/Android.mk: Cannot find module with tag ‘CocosDenshion/android’ in import path Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ? Android NDK: The following directories were searched: 我的android.mk文件中有以下几行 $(Call import-add-path, $(LOCAL_PATH)/../../../CocosDenshion/android) LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static include $(BUILD_SHARED_LIBRARY) $(call import-module,CocosDenshion/android) $(call import-module,cocos2dx) 在我的build_native.sh中,NDK_MODULE_PATH定义为 “NDK_MODULE_PATH=${COCOS2DX_ROOT}:${COCOS2DX_ROOT}/cocos2dx/platform/third_party/android/prebuilt” 任何人都可以帮我解决这个问题。