Tag: android ndk

如何获得用NDK应用程序编写的“printf”消息?

如果我在java文件中定义这样的function /** * Adds two integers, returning their sum */ public native int add( int v1, int v2 ); 所以我需要在C文件中编码 JNIEXPORT jint JNICALL Java_com_marakana_NativeLib_add (JNIEnv * env, jobject obj, jint value1, jint value2) { printf("\n this is log messge \n"); return (value1 + value2); } 那么从这个printf将打印它的消息? 在login我不明白吗? 如何通过放置日志消息来debugging任何NDK应用程序?

为什么一些Android手机导致我们的应用程序抛出java.lang.UnsatisfiedLinkError?

在市场上使用我们的应用的某些Android手机上,我们遇到了java.lang.UnsatisfiedLinkError 。 问题描述: static { System.loadLibrary("stlport_shared"); // C++ STL System.loadLibrary("lib2"); System.loadLibrary("lib3"); } 使用java.lang.UnsatisfiedLinkError将System.loadLibrary()行中的应用程序崩溃。 java.lang.UnsatisfiedLinkError: Couldn't load stlport_shared from loader dalvik.system.PathClassLoader[dexPath=/data/app/app_id-2.apk,libraryPath=/data/app-lib/app_id-2]: findLibrary returned null 解决scheme 我们开始在所有安装上运行一些自定义诊断程序,以检查每个lib是否在/data/data/app_id/lib文件夹中解压缩。 PackageManager m = context.getPackageManager(); String s = context.getPackageName(); PackageInfo p; p = m.getPackageInfo(s, 0); s = p.applicationInfo.dataDir; File appDir = new File(s); long freeSpace = appDir.getFreeSpace(); File[] appDirList = appDir.listFiles(); […]

如何在64位Android设备上使用32位本机库

我在我的应用程序中使用了一个本地库,它只为armeabi,armeabi-v7a和x86编译。 当这个库加载到像三星S6这样的64位设备上时,应用程序崩溃,出现UnsatisfiedLinkError java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.myapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libfoo.so" at java.lang.Runtime.loadLibrary(Runtime.java:366) at java.lang.System.loadLibrary(System.java:989) 图书馆封闭的来源不幸。 有没有办法解决这个问题,而不用重新编译64位目标的库?

Android ndk std :: to_string支持

我正在使用android NDK r9d和工具链4.8,但我不能使用std :: to_string函数,编译器会引发此错误: error: 'to_string' is not a member of 'std' android ndk不支持这个function吗? 我尝试APP_CPPFLAGS := -std=c++11没有运气。

JNI位图操作,帮助避免使用大图像时的OOM

背景 大多数情况下,在Android上获得OOM是由于使用了太多的位图和/或创build大的位图。 最近我决定尝试JNI,以便通过将数据本身存储在JNI端来避免OOM。 经过一段时间的搞乱JNI后,我已经创build了一些post寻求帮助和分享我的知识,我现在决定与你分享一些更多的代码。 这里是任何人有兴趣阅读发现或贡献的post: 如何将位图caching到本机内存 在android上使用JNI进行图像解码和操作 JNI – 如何使用不同字段的多个Jni包装实例? 使用JNI和NDK旋转位图 这一次,我添加了存储,恢复,裁剪和旋转位图的function。 应该很容易添加更多的选项, 如果其他人在这里将他们自己的代码添加到更有用的function , 我会很高兴 。 所以我要展示的代码实际上是我创build的所有东西的合并。 使用示例代码: Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher); final int width=bitmap.getWidth(),height=bitmap.getHeight(); // store the bitmap in the JNI "world" final JniBitmapHolder bitmapHolder=new JniBitmapHolder(bitmap); // no need for the bitmap on the java "world", since the operations are done on the JNI "world" […]

捕获在Android上运行的本机代码引发的exception

我目前正在进行的项目需要我编写跨平台程序实现的android部分。 我的应用程序通过android-ndk构build了一套核心function。 我发现,在本地代码中发生的任何exception/崩溃只能一次又一次地报告。 发生错误时,出现以下某种行为: 发生堆栈跟踪/内存转储并写入日志文件。 该程序消失(没有迹象表明,为什么突然,应用程序不再在那里)。 没有堆栈跟踪/转储或其他指示,本机代码崩溃。 程序消失。 java代码崩溃,出现NullPointerExceptionexception(通常在每个本地代码exception的地方,这是一个巨大的痛苦)。 通常会导致我花费相当长的时间来debugging为什么Java代码抛出一个错误只发现Java代码是好的,本机代码错误已被完全掩盖。 我似乎无法find任何方法来“绝缘”我的代码与本地代码中发生的错误。 Try / catch语句被完全忽略。 除了当我的代码被指责为罪魁祸首,我甚至没有机会警告用户,而不是发生错误。 有人可以帮我解决如何应对崩溃的本地代码的情况?

Android NDK:警告:APP_PLATFORM android-9比android:minSdkVersion 8大

使用cygwin编译我的cocos2d-x项目时遇到以下警告。 `/cygdrive/e/project/MyGame/proj.android ` /cygdrive/e/android-ndk-r8e/build/core/add-application.mk:128: Android NDK: WARNING:APP_PLATFORM android-9 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml 我正在使用NDK版本r8e。 我的AndroidManifest.xml中的最低SDK版本是8,但是我没有在任何地方指定APP_PLATFORM作为android-9。 我怎样才能改变这个8。 任何人都可以告诉我如何解决这个警告,因为我认为这可能会导致问题。

指纹扫描仪使用相机

使用相机或不使用指纹扫描仪,其可能性和成功率?,我遇到了一个名为FingerJetFX的开源SDK,它也为Android提供了可行性。 FingerJetFX OSE指纹特征提取器是独立于平台的,可以通过对make文件进行适当的更改来构build,并可以在包含或不包含操作系统的环境中运行,包括 Linux的 Android的 视窗 Windows CE 各种RTOS 但是我不确定指纹扫描仪是否可行,我下载SDK和挖掘,但没有运气,甚至没有发现任何步骤来整合SDK,所以有以下几个问题: 我正在寻找build议和指导: 指纹扫描仪可以在Android使用相机或没有相机? 在FingerJetFX的帮助下,我能达到目标吗? 如果第二个答案是肯定的,那么有人可以提供我任何步骤来整合SDK在Android? 你的build议是可观的。

在Android应用程序中embeddedChromium或Webkit

对于我们的Android应用程序,我们想embedded我们自己的浏览器/渲染引擎。 Webkit / Chromium是最有可能的select。 我们正在寻找类似于WebView的东西,本质上是,但是由我们控制的浏览器(版本)支持。 背景 我们的应用程序的重要组成部分包括视图中embedded的网页片段(由应用程序本身提供)。 我们尽可能透明地做到这一点(从视觉/用户体验的angular度来看)。 到目前为止,我们一直在使用WebView来实现这个function,而且这个function在很大程度上起作用 除非没有。 一些手机厂商不幸地决定调整标准的Android浏览器在这里和那里。 在某些情况下,这会打破我们的应用程序,或者使得我们embedded一个更明显的网页。 我们的想法 我们希望有一个类似于WebView的组件,但是我们可以控制使用什么版本的Webkit / Chromium(或其他渲染引擎)。 这不一定是最新和最好的版本。 更重要的是,我们可以让我们的应用程序在尽可能多的Android设备上保持一致 。 至今 迄今为止我们的研究还没有发现任何有用的东西。 我们已经发现了三次将Webkit移植到NDK的尝试(Android版裸露的Webkit端口使用了NDK中不具备的function,因此不适用于应用程序开发人员): 公司100的Webkit Android端口 (两年以上没有更新) mogo浏览器 (他们的最后一次修改是删除所有的源代码) NDK Webkit (由其作者正式放弃) 看着StackOverflow,我们也发现了一些类似的问题,其中大部分是通过指向WebView来解决的(我们已经这样做了,而且还不够好) Android的Webkit组件 在我的应用程序中embedded基本的WebKit + V8 使用Android应用程序embedded更新版本的WebKit 我们目前正在调查Android的Chromium (或其中的一部分)是否可以变成我们的应用程序可以使用的库。 有没有其他人做到这一点? 更新 看看GitHub上的chromeview项目(已接受的答案)后,我们决定等待Google在未来的Android设备上发布基于Chrome的WebView。 Chromium渲染引擎变得相当大(〜40MB),这不会为实际的应用程序留下太多的空间:(

在Android上运行Node.Js

所以我知道这已经被质疑了很多。 准确地说,例如在这些问题中: 在Android中运行NodeJs服务器 如何在android上运行我的node.js项目? 和 IOS / Android上的NodeJS 提出的每个选项都有一个问题: 我想在我的普通设备上运行它,所以我想避免在我的设备上安装另一个操作系统 在上个月停止了JXCore的工作,(可能因此)我无法编译它(请参阅无法安装jxcore-cordova ) 自2014年以来,NodeJs 阳极的Android端口一直没有工作,反正也没有真正保持 我提到的第二个线程中的第二个答案是Android的官方节点发布,除了链接到最新的浏览网站,我找不到任何有关如何实际使用它的信息 我也看到了这一点,但似乎设备必须连接到PC(或类似的)来运行adb shell命令,而我想作为一个单独的应用程序 从这些问题发布之后的那段时间开始,作为JXCore似乎无法使用的“最佳select” 有没有办法在Android设备上运行node.js应用程序(我的情况是一个服务器)? 如果你想知道为什么我想要这样做:我用一个Node.Js服务器创build了一个WebApp,现在我想要一个可以在本地从你的手机启动的版本,而不需要Internet连接。 这意味着服务器需要在Android手机上运行。