Tag: android

如何判断进程地址空间中加载共享库的位置?

我正在尝试调试一个共享库,我有源代码和调试符号,以便使用gdb。 我没有实际使用这个共享库的进程的调试符号或代码(我自己编译它,所以我可以拥有所有内容,但是生成的二进制文件被剥离,以模拟我没有代码的情况)。 该进程打印我正在尝试调试的目标函数foo的地址,以测试gdb是否知道共享库中符号的正确位置。 foo存在我的共享库。 我的打印方法是将以下行添加到使用我的共享库的二进制文件中: printf(“%p\n”, foo) …而且为了增加复杂性,这是一个我正在远程调试的Android系统。 我正在尝试的方案如下: 估计的正好: root@phone:/proc/23806 # gdbserver –attach :5555 23806 Attached; pid = 23806 Listening on port 5555 Remote debugging from host 127.0.0.1 在主持人: [build@build-machine shared]$ /home/build/shared/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/arm-eabi-gdb GNU gdb (GDB) 7.3.1-gg2 Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free […]

为什么缺少某些传感器的枚举值? 使用它们是否安全?

似乎中缺少某些传感器的枚举值。 该文件定义了以下枚举: /* * Sensor types * (keep in sync with hardware/sensor.h) */ enum { ASENSOR_TYPE_ACCELEROMETER = 1, ASENSOR_TYPE_MAGNETIC_FIELD = 2, ASENSOR_TYPE_GYROSCOPE = 4, ASENSOR_TYPE_LIGHT = 5, ASENSOR_TYPE_PROXIMITY = 8 }; 评论说这个枚举与同步(它没有暴露,它是android源代码的一部分)。 但是在我发现了更多有用的传感器的值 ,如压力,温度和湿度传感器: #define SENSOR_TYPE_ACCELEROMETER (1) #define SENSOR_TYPE_GEOMAGNETIC_FIELD (2) #define SENSOR_TYPE_ORIENTATION (3) #define SENSOR_TYPE_GYROSCOPE (4) #define SENSOR_TYPE_LIGHT (5) #define SENSOR_TYPE_PRESSURE (6) #define SENSOR_TYPE_TEMPERATURE (7) […]

如何在android studio中启用霓虹灯来构建和调试本机代码(c)?

我指的是它可能是调试cc-in-android-studio吗? Yuchen Zhong的最后一个答案也做了一些基本的例子,我也能够构建和调试。 所以现在我正在尝试使用我的旧应用项目做同样的事情。 我的旧应用程序buil.gradle是 apply plugin: ‘com.android.application’ android { compileSdkVersion 18 buildToolsVersion “23.0.1” defaultConfig { applicationId “pku……” minSdkVersion 9 targetSdkVersion 17 sourceSets.main { jni.srcDirs = [] jniLibs.srcDir ‘C:/Users/Admin/AndroidStudioProjects/and…./app/src/main/libs’ } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.txt’ ndk { debuggable = true } } debug { debuggable = true jniDebuggable = true […]

未定义的引用错误 – rand

我正在创建一个命令行C ++测试应用程序(可执行文件),在我的root设备上运行。 可执行文件使用多个预构建的C库,其中一个使用’rand()’。 在链接状态期间,我得到错误“ 未定义的’rand’参考 ” 要检查路径是否设置正确,我尝试了以下方法但没有成功。 第一种方法:我在测试源中定义了rand()。 我注意到我得到了多个定义错误,第一个定义是在bionic / libc / include / stdlib.h中 第二种方法:在我的测试应用程序中使用rand() 我注意到链接器不会在这里抱怨未定义的符号 第三种方法:取消归档和归档所有目标文件 发现我仍然得到未定义的引用错误。 当使用’rand’的C库使用C测试文件编译成可执行文件时,看不到所提到的链接器错误。 我无法修改预构建的静态库,需要将库与基于C ++的测试应用程序一起使用。 任何投入都将非常受欢迎。

非法指令 – 在android上运行Cross编译的c代码

请问我需要帮助:((此问题之前已经发布但尚未解决。我正在尝试在模拟器上运行的Android 2.3.3平台上运行C代码。这是我的代码(甚至不是hello world):test 。C void main() { } 交叉编译:arm-linux-gnueabi-gcc -static -o test test.c ->adb push test /data/local ->./test 我得到了:非法指令./test 我也尝试使用-march = armv5进行编译但结果相同。 CPU信息: ->adb shell /proc/cpuinfo CPU架构:5TEJ 我已经迷失在互联网上寻找解决方案。 如果有人解决了这个或有任何想法请分享。 我非常感谢你的帮助。

Android VpnService保护存储在本机代码中的套接字?

我正在编写VPN应用程序,用于VPN连接的套接字是在我的本机C代码中处理的,而不是在java中处理的。 如何在该套接字上使用VpnService.protect() ? 我注意到它有一个VpnService.protect(int)重载,我可以返回socket从本机代码返回到Java的int并以这种方式保护它吗? 例 // Native Code int socket; JNIEXPORT jint JNICALL Java_com_my_package_Class_initializeSocket ( JNIEnv *env, jobject jobj ) { socket = socket(AF_INET, SOCK_DGRAM, 0); // . . . Handler other socket preparations return (jint)socket; } // Java Code public native int initializeSocket(); . . . int socket = initializeSocket(); this.protect(socket); 编辑 我确实找到了这个描述protectfunction如何工作的问题,看起来它可能在C中有一个非常简单的实现,因为看起来它只是使用了setsockopt调用。 但我对C也比较陌生,所以我不能完全遵循如何复制它。

Android NDK套接字connect()在3g时失败时返回0

我在android NDK中编写了一个套接字,在c中编写了一个服务器。 它能够很好地连接到服务器。 但是,如果服务器已关闭或我尝试将其连接到另一个随机IP,则当它应返回-1时,对connect的调用仍会返回0。 以下是客户端的代码: #include #include #include #include #include #include #include #include #define APPNAME “MyApp” #define logcat(…) __android_log_print(ANDROID_LOG_VERBOSE, APPNAME, __VA_ARGS__) int createSocket() { int sockFD; if ((sockFD = socket(AF_INET, SOCK_STREAM, 0)) < 0) { logcat("Unable to create socket"); return -1; } logcat("Socket created: %i", sockFD); return sockFD; } JNIEXPORT jint JNICALL Java_myapp_client( JNIEnv* env, […]

Android如何增加ffmpeg mp4的性能?

我已经检测到函数avcodec_decode_audio3在mp4格式下运行缓慢,这里是解码音频的代码周期: while (av_read_frame(av_format_context, &packet) >= 0 && is_play == 1) { if (av_codec_context->codec_type == AVMEDIA_TYPE_AUDIO && is_play == 1) { int out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE; int size = packet.size; int n; int dataLength = size; int decoded = 0; while (size > 0) { //start measure time gettimeofday(&tvBegin, NULL); int len = avcodec_decode_audio3(av_codec_context, (int16_t *) pAudioBuffer, […]

在Android Studio中使用预构建的共享库

我需要在我的android项目中使用自定义的预建共享库(在独立的ndk上构建为libdynamic.so)。 我在路径src / main中创建了一个文件夹“jniLibs”,然后在其中创建了4个文件夹,即“armeabi”“armeabi-v7a”“x86”“x86_64”。 我已将预构建的库放在所有这4个文件夹中。 现在从我的本机代码我想调用这个库的一个函数。 按以下方式(在cmakelists.txt中包含标题): extern “C” JNIEXPORT jstring JNICALL Java_demo_co_ru_jnilibtest_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { float inv = rsqrt(3); //FUNCTION FROM LIBRARY (libdynamic.so) std::string hello = “Hello “; return env->NewStringUTF(hello.c_str()); } 我收到以下错误: Error:error: cannot find -ldynamic Error:(19) undefined reference to ‘rsqrt(float)’ Error:error: linker command failed with exit code 1 (use […]

从手机图库中选择图片

这是我的logcat 06-03 17:35:58.603: E/AndroidRuntime(300): FATAL EXCEPTION: main 06-03 17:35:58.603: E/AndroidRuntime(300): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/1 }} to activity {com.example.fatwallet/com.example.fatwallet.Create_adds_Activity}: java.lang.NullPointerException 06-03 17:35:58.603: E/AndroidRuntime(300): at android.app.ActivityThread.deliverResults(ActivityThread.java:3515) 06-03 17:35:58.603: E/AndroidRuntime(300): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 06-03 17:35:58.603: E/AndroidRuntime(300): at android.app.ActivityThread.access$2800(ActivityThread.java:125) 06-03 17:35:58.603: E/AndroidRuntime(300): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063) 06-03 17:35:58.603: E/AndroidRuntime(300): at android.os.Handler.dispatchMessage(Handler.java:99) 06-03 17:35:58.603: E/AndroidRuntime(300): at android.os.Looper.loop(Looper.java:123) […]