Tag: android

你如何找到两点之间的相对影响?

double computeHeading(double latitude1, double longitude1, double latitude2, double longitude2) { double degToRad = PI / 180.0; double phi1 = latitude1*degToRad; double phi2 = latitude2*degToRad; double lam1 = longitude1*degToRad; double lam2 = longitude2*degToRad; double x,y; x = cos(phi2) * sin(lam2-lam1); printf(“X is %lf\n”, x); y = cos(phi1) * sin(phi2) – sin(phi1) * cos(phi2) * cos(lam2-lam1); printf(“Y […]

堆腐败 – Android原生代码中的SEGV_MAPERR

我正在尝试为流AES加密创建一个小型库,我开始基于Facebook Conceal项目( https://github.com/facebook/conceal )开展我的工作,只是更改了一些内容并改进了本机的包装以支持密码用填充物。 它工作正常,它可以解密文件没有问题,但是当我处理大流时,我得到随机的堆内存损坏,经过大量的时间调试,我一直无法找到错误。 这是我的代码: https://gist.github.com/frisco82/9782725 我试图找到内存分配或免费问题,但几乎没有malloc或free,而jni调用应该是安全的,openssl也是如此(我编译了自己但隐藏提供的也失败了) CheckJni没有任何警告,虽然上下文处理有点开箱即用,但它看起来并没有破坏(事实上Android的密码似乎使用了类似的东西)。 此外,如果有人可以指向我的Android本机AES多步骤(多个更新调用)库,我将切换到那个并忘记这一点。 错误时常变化,但通常与他的相似: 03-26 10:33:02.065: A/dalvikvm(2475): @@@ ABORTING: DALVIK: HEAP MEMORY CORRUPTION IN mspace_malloc addr=0x0 03-26 10:33:02.065: A/libc(2475): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 2494 (AsyncTask #1) 03-26 10:33:02.205: I/DEBUG(933): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** […]

compilin错误:字段必须具有常量:android 2.3.4源代码永远不支持’结构中的可变长度数组’扩展名

嗨我在android 2.3.4源代码中尝试make libdvm时出现以下错误, external/elfutils/libebl/eblobjnote.c:43:17: error: fields must have a constant size: ‘variable length array in structure’ extension will never be supported uint32_t version[descsz / 4 – 1]; 这是我的mac os x mountain lion上gcc 4.2报告的真正的c错误。 我猜有一些与gcc 4.2和android 2.3.4源代码不兼容。 我不得不改变一些事情来使编译达到这一点。 我不知道哪个gcc版本用于编译代码,但gcc 4.2经常在代码中发现错误。 任何人都可以告诉我如何处理这些错误,或者在最糟糕的情况下我应该使用哪个gcc版本以及如何降级到mac os x中的特定版本?

一旦安装了应用程序,Android原生库就会消失

切换到Android Studio后,我开始看到可怕的 java.lang.UnsatisfiedLinkError: dlopen failed: library ‘/data/app-lib/com.myapp.test-1/libmylib.so’ not found 错误。 当我解压缩apk时,我可以看到libmylib.so以及lib / armeabi文件夹下的所有其他本机库(libmyotherlib.so和libtest.so),所以打包不应该是问题…我决定root我的测试设备,并检查我的应用程序的文件夹/ data / app-lib下的实际内容,其中的本机库应该在安装后 – 我发现应用程序后我的应用程序的本机库之一(libmylib.so)丢失了安装在设备上。 libmylib.so和libmyotherlib.so是预先构建的.so文件放在src / main / jniLibs中,而libtest.so是从test.c在src / main / jni中编译的。 这只是在我切换到Android Studio后才开始的; 我已经validation了在Eclipse ADT中使用相同代码构建的apks在安装后在/data/app-lib/com.myapp.test-1下提供了所有必需的库。 Android Studio版本的相关build.gradle: apply plugin: ‘com.android.application’ android { compileSdkVersion 23 buildToolsVersion “21.1.2” defaultConfig { applicationId “com.myapp.test” minSdkVersion 17 targetSdkVersion 23 versionCode 1 versionName “1.0” ndk{ […]

JNI调用非静态函数段错误

我正在为Android的SDL库做一些工作,但我有一点障碍。 此函数在Java中定义: /** * This method is called by SDL using JNI. * @return an array which may be empty but is never null. */ public static int[] inputGetInputDeviceIds(int sources) { int[] ids = InputDevice.getDeviceIds(); int[] filtered = new int[ids.length]; int used = 0; for (int i = 0; i < ids.length; ++i) { InputDevice […]

Android 4.4和5.0中multithreading加速的效率完全不同

我写了一段C代码来在Android中进行一些图像处理(密集计算)(由NDK编译并由jni.h使用)。 为了加速图像处理,我在C代码中使用了pthread_create和pthread_join函数来利用4个线程同时处理图像。 multithreading加速在Android 4.4手机中是成功的,但在所有Android 5.0手机中都失败了。 假设在单线程环境中image_processing函数的处理时间是1s。 我们利用4个线程来加速image_processing函数,如下所示: void image_processing_multiply_threads() { int i; pthread_t pt[4]; for(i = 0 ; i < 4; i++) { if ( pthread_create(pt + i , NULL, image_processing, (void *)(arg + i)) != 0 ) { return; } } for (i = 0; i < 4; i++) { pthread_join(pt[i], NULL); } } […]

如何在我的共享库中包含使用libdvm.so的正确包含文件?

我想使用下面的API,它位于dalvik / vm / native / dalvik_system_DexFile.cpp: static void Dalvik_dalvik_system_DexFile_defineClass(const u4* args, JValue* pResult) static void Dalvik_dalvik_system_DexFile_openDexFile_bytearray(const u4* args, JValue* pResult) 但我不知道如何在libdvm.so中包含使用上述两个API的正确包含文件。 我试图在android项目中包含整个头文件,但它失败了这个编译错误消息:“参数列表太长”。 有人知道在libdvm.so中使用上面两个API需要做些什么吗? 谢谢。 – 添加 – 在dalvik / vm / native / dalvik_system_DexFile.cpp中,还有一些其他代码允许其他人使用静态API。 const DalvikNativeMethod dvm_dalvik_system_DexFile[] = { { “openDexFile”, “(Ljava/lang/String;Ljava/lang/String;I)I”, Dalvik_dalvik_system_DexFile_openDexFile }, { “openDexFile”, “([B)I”, Dalvik_dalvik_system_DexFile_openDexFile_bytearray }, { “closeDexFile”, “(I)V”, Dalvik_dalvik_system_DexFile_closeDexFile }, […]

Eclipse无法读取RenderScript .rs文件的代码格式

我有一个非常好的Android知识(1年的开发),现在我正在尝试学习Android RenderScript API(但没有太多的文档),无论如何,我遇到了一些问题。 我了解到我们需要在project.propert上添加以下行: renderscript.target=19 renderscript.support.mode=true 我在com.mypackage.script创建了一个名为FireworkScript的.rs文件,其中包含以下内容: #pragma version(1) #pragma rs java_package_name(com.mypackage.script) #include “rs_graphics.rsh” int root(){ return 0; } void init(){ } 我在使用RenderScript v8支持库时遇到了一些问题,但我通过手动将renderscript-v8.jar添加到我的项目来修复它( 构建路径>>配置构建路径>>库>>添加外部JAR ) 正如所料,Eclipse在gen文件夹中生成ScriptC_FireworkScript.java ,在bin / res / bc / raw生成fireworkscript.bc 但问题是 :Eclipse没有“读取”.rs文件中的代码,使用eclipse对此文件进行写入与在任何单个文本编辑器上进行写入相同。 我知道上面的示例需要一个内核,但是如果Eclipse没有读取它的代码格式,我该怎么写呢? 我知道C中的简单typedef struct构造函数,但我不熟悉C99中的内核声明和参数 我只能使用project > clean找到错误,它似乎“刷新”编译器,但无论如何,我没有任何识别帮助,文本着色,任何东西,只有一个带有黑色文本的文件,我该怎么办解决这个问题? 我还尝试使用Dev C ++和Notepad ++打开.rs文件,但我得到了相同的结果。 也许我的机器不知道C99代码格式化? 有什么我可以做的吗? 提前致谢。 我正在使用Eclipse Luna和ADT插件,目前在23.0.2上使用SDK构建工具,所有内容都更新到最新版本。

在JNI调用中调用getFilesDir()时出现NullPointerException

我试图通过JNI调用从C库调用Java的getFilesDir(),并且我遇到了一个我不理解的NullPointerException。 这是例外: W/System.err( 1576): java.lang.NullPointerException W/System.err( 1576): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) W/System.err( 1576): at MYService.getFilesDirPath(MYService.java:1150) W/System.err( 1576): at MYService.UtvGetPeristentPath(Native Method) 问题出现在这个函数中: public String getFilesDirPath() { try { return getFilesDir().getPath(); // <— Exception happens here! } catch(Exception e) { e.printStackTrace(); Log.e("DEBUG", "getFilesDirPath set exception", e); return null; } } JNI调用设置了一些由JNI_OnLoad设置的静态变量: static JavaVM *s_jvm = NULL; static jclass cls; […]

分配给Out paramaeter时,Android Render Script Error

我收到了错误 Fatal signal 11 (SIGSEGV) at 0x51b71000 (code=1), thread 3696 (sssist.magnitab) 每当我为out参数赋值给发送回值主app时,当我删除赋值错误消失时,这里是我的代码,(下面是android代码部分) void root(const char *in, int *out, uint32_t x, uint32_t y) {\ int pixelData[size]; for (int i = 0; i <size ; i += 16) { //rsDebug("—————:","3333"); int lumOne = in[i]; lumOne += 128; pixelData[lumOne]=pixelData[lumOne]+1; int lumTwo = in[i+2]; lumTwo += 128; //pixelData[lumTwo]++; pixelData[lumTwo]=pixelData[lumTwo]+1; […]