Tag: Android的NDK

如何以编程方式关闭Android手机?

我想制作一个锁屏应用程序。 当手机处于锁定模式时,它会在插入USB时关闭手机,以防止其他用户访问手机数据。 有没有人知道如何以编程方式关闭Android设备,以便其他人在设备处于锁定模式时无法访问数据? 这是锁定屏幕活动上锁定主页按钮的代码: @Override public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }

AndroidRuntime引起:java.lang.unsatisfiedLinkError:无法加载tfp_jni:findLibrary返回null

所以,看起来有很多像我这样的问题,但不确定它们是否与我的问题有关。 好。 我有一个Android项目,它使用SDK作为引用库。 SDK包含C ++,所以我使用的是android-ndk-r9库。 我在Android项目中引用的SDK是一个JNI库(Oooooo – 可怕的东西)。 哦是的,不要让我忘记提及armeabi-v7a(这似乎是另一个可怕的主题)。 执行此行时发生错误: System.loadLibrary(“tfp_jni”); tfp_jni实际上是我的SDK库项目的libs文件夹中的armeabi-v7a文件夹下的libtfp_jni.so文件。 该SDK库项目包含Android.mk文件。 我认为代码不会进入那里。 但这是.mk文件的内容: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := tfp-prebuilt LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libtfp_jni.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) 然后在我的Android项目中,我有一个包含Android.mk和Application.mk的jni文件夹。 以下是内容: Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) OPENCV_INSTALL_MODULES:=on OPENCV_INSTALL_CAMERA:=off include $(INNERID_ANDROID_ROOT)/Android.mk include $(OPENCV_ANDROID_ROOT)/sdk/native/jni/OpenCV.mk Application.mk APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions […]

如何在JNI中从C ++调用Java方法

所以我正在编写一个使用大型c ++库的Android应用程序。 我有一切工作,以便java应用程序可以调用c ++委托方法,但我发现自己希望我可以将消息从c ++记录到Android日志。 这很容易从java,但我不知道如何从c ++调用java方法。 我的搜索找到了从c ++打开jvm的方法,这根本不是我想要做的。 理想情况下,我想将一个日志方法指针传递给c ++,然后可以随时使用它。 当然,java不支持方法指针。 我的java方法看起来像: private void log(String s){ Log.i(Tag, s); // Android log } 我只是不知道如何允许c ++访问此方法。

在android ndk中共享内存

我想将大数据从一个进程/应用程序传输到Android中的另一个进程/应用程序,但是一些如何使用Java层中的内存文件创建共享内存不起作用。 然后尝试在我读过的某个地方创建了android native中的共享内存 可以使用ashmem_create_region API。 但看起来这个API无法访问或打开。 它在libcutils.so里面。 在… android-ndk-r9c/platforms/android-19/arch-arm/usr/lib/rs/libcutils.so Q1。 如何在Android本机代码中访问此库。 Q2。 如果无法访问,那么在ndk工具中提供此function的目的是什么。 Q3。 如果以某种方式我链接libcutils.so并能够使用libcutils.so在本机创建共享内存然后我可以使用此fd与Java层中的MemoryFile映射,这样它将避免应用程序本机副本为每个数据事务写入。

位图/canvas使用和NDK

我最近发现NDK代码可以分配的内存量没有硬限制,相比之下,您可以在Java端分配大量有限的内存(大多数设备上大约25Mb)。 我想编写一个图像处理应用程序(类似于Photoshop),需要在内存中同时保留几个大位图,其中位图数据将占用大约20Mb的内存。 在Java中执行此操作会使应用程序在我尝试过的许多设备上容易出现内存不足exception。 我当前的所有代码都使用Bitmap和Canvas类来进行图像处理。 任何人都可以提出一些方法,允许我在C端分配大部分内存,并仍然使用Bitmap + Canvas来执行我的绘图操作(使用Android 2.1及更高版本)? 例如,如果我的图像由6个位图图层组成,并且用户正在第3层上绘画,我需要将绘制blob位图绘制到第3层,然后更新屏幕以显示在顶部展平所有图层的结果彼此实时的。 我已经考虑过将C中的6位图分配为int数组并使用Canvas使用存储在Bitmap对象中的正在编辑的图层的副本在Java端执行绘制操作。 我不确定扁平化阶段是如何起作用的。

android通过C获取屏幕大小

我希望通过c获得屏幕尺寸。 我知道jni支持从c调用java。 但是有谁知道另一种方法? 我的意思是从低级模块获取屏幕大小而不调用java。 import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v(“getWidth”, Integer.toString(getWindowManager().getDefaultDisplay().getWidth())); Log.v(“getHeight”, Integer.toString(getWindowManager().getDefaultDisplay().getHeight())); } } 我认为/ dev / graphics与我的问题有关

C ++ ifstream.getline()明显慢于Java的BufferedReader.readLine()?

我正在重写我的一个Android应用程序以利用NDK,每次打开一个1.5MB的文本文件(大约150k行)时,首先要做的事情之一就是把每一行放在一个数据中结构体。 当我使用Java的BufferedReader.readLine()执行此操作时,从SD卡读取文件大约需要2.5秒。 这是我用于此的代码: try { BufferedReader br = new BufferedReader(new FileReader(“/sdcard/testfile.txt”)); String thisLine; while ((thisLine = br.readLine()) != null) { Log.d(TAG, thisLine); } } catch (IOException e) { //Log error } 在ifstream中使用C ++需要更长的时间……对于同一个文件大约需要3分钟。 这是我在C ++中使用的代码: char buffer[256]; ifstream ifs; ifs.open(“/sdcard/testfile.txt”, ifstream::in); if (ifs.is_open()) { while (!ifs.eof()) { ifs.getline (buffer,100); LOGD(buffer); } } 我对C ++很生疏,但是对于增加的读取时间没有任何合理的解释。 有一段时间我以为它可能是LOGDfunction,但我尝试完全取消它,读取时间根本没有多大帮助。 […]

使用ffmpeg从图像创建video文件

我能够在我的项目创建的Android.mk文件中编译并添加ffmpeg到jni文件夹现在我想使用ffmpeg从我存储在静态arraylist中的图像创建一个video文件 我已经搜索了很多,但找不到任何教程任何帮助真的很感激。

如何使用Eclipse调试JNI代码(Java和C / C ++)

虽然我可以使用用于Java代码的Eclipse JDT调试器和用于C代码的GDB调试我的应用程序,但我更倾向于使用单个工具进行所有调试。 我找到了几个在Eclipse中启用“混合模式”调试的项目,并支持Java和本机代码之间的单步执行。 英特尔针对Java / JNI环境的集成调试器 Mariot Chauvin的代码之夏项目:支持JDT和CDT之间的无缝调试 不幸的是,一个声称是预发布质量,另一个目前没有维护。 是否有任何插件能够以可靠的方式为Eclipse带来混合模式调试function,还是应该继续使用两个单独的调试器?