Articles of jni

我们可以访问我的Android手机的麦克风驱动程序

我们可以使用Android NDK访问我的Android手机的麦克风驱动程序吗?如果有,那我该怎么办? 我可以将驱动程序设置为禁用一段时间吗? 我可以检测使用手机麦克风的手机的应用程序名称吗? 根据Android多媒体框架,MediaServer负责打开设备,基于Java的音频应用程序将其作为客户端连接。 数据传输发生在Binder上。 因此,只有一个进程可以打开音频设备。 现在我想知道如何从MediaServer获取信息? 任何人都知道这个或任何其他想法,find哪个应用程序正在使用我的手机麦克风,我不能使用root权限。

尝试访问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 我没有更改任何代码,只有库。 这仍然是一个许可问题,或者是否有一些我想念的东西会使这个工作?

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; […]

ndk-stack无法正常工作

我正在调用ndk-stack如下: cat file_temp | ~/workspace/android-ndk-r6b/ndk-stack -sym /home/xyz/trunk/apk/obj/local/armeabi/ 它find了崩溃指纹,但未能显示堆栈分析。 打印错误是: ndk-stack: elff/elf_file.cc:102: static ElfFile* ElfFile::Create(const char*): Assertion `read_bytes != -1 && read_bytes == sizeof(header)’ failed. Stack frame #00 pc 43121300 Aborted 有任何想法吗? 谢谢。

JNI:在GetMethodID的函数签名中传递多个参数

我试图在Java(从C)中执行具有以下签名的函数: public void execute(int x, int y, int action); 我的问题是在GetMethodID中定义函数签名: env->GetMethodID(hostClass, “execute”, “(I;I;I;)V”); 我遇到的问题是: W/dalvikvm( 1849): Bogus method descriptor: (I;I;I;)V W/dalvikvm( 1849): Bogus method descriptor: (I;I;I;)V D/dalvikvm( 1849): GetMethodID: method not found: Lcom/device/client/HostConnection;.execute:(I;I;I;)V 我不知道如何在GetMethodID中指定方法签名(对于3个整数作为参数)。 我看到人们使用“;” 为String和File类分隔其他post中的参数,但没有像整数这样的基元。 请问这样做的正确方法是什么? 谢谢。

如何在android中使用c / cpp库/函数

我想在使用jni的android应用程序中使用c / cpp函数/库。 任何建议/链接/教程/示例? 我的问题与指针/结构在c / cpp中返回。 如何在android中使用指针/结构? 实际上我正在尝试开发远程桌面应用程序,因为我能够在Android中访问我的电脑。

从.aar文件Android中提取代码

如何从aar文件中提取代码。[无意中我的主项目在另一个系统上无法访问我的邮件上只有aar文件] 我需要从aar文件中提取JNI代码。 我试图将扩展名更改为.jar但仅提取.class,有人知道如何提取那些aar的东西。

Android ndk:使用jni从c ++调用Java方法的问题

我尝试使用Android NDK,我的第一个测试不是很确定,我需要帮助,因为我没有看到我的错误在哪里。 下面的代码编译没有问题,但是当在模拟器上运行时,程序返回SIGSEGV信号,并且没有在logcat中显式写入错误。 但是,会出现一个警告,指示未findJava类。 经过一天对这个问题的研究,一切看起来都是正确的。 这是我的Java代码:JNITestActivity.java package com.test.jnitest; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class JNITestActivity extends Activity { private static String LIB_NAME = “JNItest”; static { System.loadLibrary(LIB_NAME); } public static native void javaCallJNI(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i(“onCreate”, “Native function begining”); javaCallJNI(); Log.i(“onCreate”, “Native function ending”); } void callFromCPP() […]

在android中包含Boost C ++库

我一直试图在Windows上与Boost和android结婚很长时间并尝试了很多方法,但仍然没有运气。 我想在android中使用Boost库制作一个示例程序。 我在这里关注本教程。 正如本教程建议我将我的Boost lib保存在****(Android NDK)\ sources \ boost_1_44_0 ****中成功编译。 然后我在sources / boost_1_44_0中创建了一个Android.mk文件,并使我想要使用的每个库的条目。 在这种情况下,lib。 文件是libboost_date_time-gcc-mt-s-1_44.a,可在boost_1_44_0 / android / lib /中find 这是Android.mk文件的内容。 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= boost_date LOCAL_SRC_FILES:= boost_1_44_0/android/lib/libboost_date_time-gcc-mt-s-1_44.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) include $(PREBUILT_STATIC_LIBRARY) 现在,下一步是在我的项目目录中,在jni文件夹中创建一个Android.mk文件。(这是为了创建一个共享库。)。 这是它的内容。 LOCAL_PATH := $(call my-dir) include $(call all-subdir-makefiles) include $(CLEAR_VARS) # Here we give our module name and source […]

一个使用Eigen库和jni的简单ndk项目

所以今天在这里的人们的帮助下,我整理了一个使用ndk的简单Android应用程序。 我将特征库直接导入到我在源代码树中创建的jni文件夹中,然后使用cygwin我能够编译项目。 下面是源代码,所以其他人试图学习jni基础知识,从c ++到java传递数据,然后返回一些代码。 应用程序只需要在edittext字段中输入6个数字,当用户单击该按钮时,两个浮点数组将传递给本机方法并加载到两个特征浮点向量中,然后将它们相加。 两个向量的乘积传递回java,然后显示在textview中。 下面是android的特征库的链接: https://bitbucket.org/erublee/eigen-android 您只需要在文件树中向下一层的实际特征文件夹。 只需将一层的特征文件夹复制并粘贴到特征源中,然后放入您创建的jni文件夹中,以便在您的android项目中保存您的c ++代码。 inheritance人java: package jnimath.act; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class JnimathActivity extends Activity { /** Called when the activity is first created. */ public EditText x; public EditText y; public EditText z; public EditText x2; […]