Tag: android

Android NDK链接问题

我用NDK编译了Sox等人。 所以,我有所有Android友好的共享库。 我做了一个调用sox函数的简单测试文件 。 NDK构建告诉我: undefined reference to `sox_open_read’ sox_open_read在sox.h中定义。 我知道它找到了sox.h,因为它给了我一个关于该文件的警告: In file included from (…)/sox/sox.h:19 所以也许它想在实际的libsox.so中找到sox_open_read。 好吧,我已经尝试了大约100种不同的方法来告诉它sox共享库的位置 LOCAL_SHARED_LIBRARY := sox LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 但是,如果我将Sox指定为静态库,它将起作用: #LOCAL_SHARED_LIBRARY := sox LOCAL_STATIC_LIBRARIES := sox LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 这是我的理解,我不想静态链接到sox库 – 我想动态链接到它。

隐藏在混淆代码中的字符串

我只是使用proguard对我的Android代码进行了混淆,然后对其进行了反编译。 有许多字符串我真的想隐藏在窥探的眼睛里。 当我反编译我的代码时,每个人都可以看到字符串……并进行更改。 其中一个字符串是我的许可服务器的URL,它们实际上可以将URL更改为指向虚假服务器(因为我将向公众发布服务器代码)。 隐藏此类信息的最佳方法是什么? 另外,我注意到R类字符串都是随机数,但我在反编译代码中找不到R类。 它在哪里? 我看到的敌人示例 : new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt); 2130903058是一个布局文件,但它引用了什么? 除非它指向某种地址,否则该数字没有任何意义。

如何在NDK上使用Android上的C函数

我想在Android应用程序中使用C语言编写的函数。 该function取自此处 。 我已经学会了android NDK的一些基础知识,我可以设法在我的Java源码中使用该函数,但是当我调用它时应用程序冻结,而不是等到android让我杀死应用程序。 JNI签名是这样的: JNIEXPORT void JNICALL Java_pda_lupa_callbacks_MySurfaceCallback_NativeYuv2rgb (JNIEnv *env, jclass clazz, jbyteArray imageIn, jint widthIn, jint heightIn, jobject imageOut, jint widthOut, jint heightOut) { jbyte *cImageIn = (*env)->GetByteArrayElements(env, imageIn, NULL); jbyte *cImageOut = (jbyte*)(*env)->GetDirectBufferAddress(env, imageOut); toRGB565((unsigned short*)cImageIn, widthIn, heightIn, (unsigned int*)cImageOut, widthOut, heightOut); (*env)->ReleaseByteArrayElements(env, imageIn, cImageIn, JNI_ABORT); } 然后我像这样在Java中加载它: static { System.loadLibrary(“rgb”); […]

Android无法在Android程序中使用Android.mk包含Linux

我正在尝试为Android 6编译一个C程序。这是我的Android.mk : APP_PLATFORM := android-23 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Enable PIE manually. Will get reset on $(CLEAR_VARS). This # is what enabling PIE translates to behind the scenes. LOCAL_CFLAGS += -fPIE -DHAVE_FANOTIFY=1 -DHAVE_SYS_FANOTIFY=0 LOCAL_LDFLAGS += -fPIE -pie # give module name LOCAL_MODULE := fsmon # list your C files to compile […]

Android NativeActivity – 拦截Java级别的输入

有没有办法在NativeActivity中将输入拦截到本机代码中的AInputQueue之前? 我需要在Java中拦截输入的原因是支持我无法使用任何android/input.h函数捕获的游戏手柄/操纵杆事件,即。 MotionEvent.getAxisValue(MotionEvent.AXIS_RZ) 。 以下内容不起作用(我的清单正确指向我派生的NativeActivity类): public class CustomNativeActivity extends NativeActivity { private View.OnTouchListener touchListener = new View.OnTouchListener() { public boolean onTouch (View v, MotionEvent event) { // This is never called! System.out.println(“onTouch”); return false; } }; public void setContentView(View view) { // This method is called, but registering a touch listener does nothing! view.setOnTouchListener(touchListener); super.setContentView(view); […]

Android ndk build无法构建32bit可执行文件

根据我的第一个问题 ,我尝试在我的应用程序中包含fanotify.h标头。 该应用程序基于fsmon (一个使用fanotify系统调用的小应用程序),我为了我的目的更改了一些代码行并创建了一个Android.mk makefile: APP_PLATFORM := android-23 TARGET_PLATFORM := android-23 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Enable PIE manually. Will get reset on $(CLEAR_VARS). This # is what enabling PIE translates to behind the scenes. LOCAL_CFLAGS += -fPIE -DHAVE_FANOTIFY=1 -DHAVE_SYS_FANOTIFY=0 LOCAL_LDFLAGS += -fPIE -pie # give module name LOCAL_MODULE := fsmon # include […]

sigemptyset()NDK UnsatisfiedLinkError dlopen()

我的Android NDK应用程序中的某个C代码调用signal.h中定义的sigemptyset()函数。 我正在使用NDK-r9构建我的项目。 在编译c代码之后,我的库文件名为“libnative-service.so” 。 但是在运行应用程序时,我得到关于sigemptyset()的以下错误。 我错过了什么? 09-22 15:13:09.102: E/art(3718): dlopen(“/data/app-lib/com.project/libnative-service.so”, RTLD_LAZY) failed: dlopen failed: cannot locate symbol “sigemptyset” referenced by “libnative-service.so”… 09-22 15:13:09.103: D/AndroidRuntime(3718): Shutting down VM 09-22 15:13:09.106: E/AndroidRuntime(3718): FATAL EXCEPTION: main 09-22 15:13:09.106: E/AndroidRuntime(3718): Process: com.project, PID: 3718 09-22 15:13:09.106: E/AndroidRuntime(3718): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “sigemptyset” referenced by “libnative-service.so”…

如何获取属于进程的所有页面的列表(linux)

有没有办法获取Linux内核中进程拥有的所有页面的列表? 我需要在这些页面上调用’page_free()’。 请告诉我!!

在Android NDK中使用pngquant lib(libimagequant)

我想在OS X上使用NDK r10(64位)在我的Android项目中使用pngquant.org/lib上的png量化库。 我在编译库方面取得了进展。 我现在的问题是无法解析size_t类型。 我尝试包含以下文件夹: LOCAL_C_INCLUDES := $(NDK_TOOLCHAIN)/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9/include 但这没有用。 我会对包含pngquant的空工作Android项目感兴趣。 任何帮助都非常感谢。 NB对不起更改问题,但我提出的原始问题中有一些不正确的事实。

如何在编译器中启用内在函数?

谁能解释一下:如何在c代码中启用内在函数? 我想在armv5TE中使用特殊的dsp指令 考虑qadd指令,当我使用汇编程序方法时它很好用,如下所示: inline int function_qadd(int a, int b) { __asm__ ( “qadd %0, %1, %2” : “=r” (a) : “r” (a), “r” (b)); return a; } 但是当我尝试使用__qadd内在而不是像这样的asm: int add_result = __qadd(5,10); LOGI(“qadd=’%d'”, add_result); 我收到了错误: 错误:未定义引用’__qadd’ 我做错了什么,如何在c代码中启用内在函数? 更新: 我有ndk android-ndk-r8c (windows版),它默认为GCC 4.6 : GCC 4.6编译器仍然是默认的, 除了我在android.mk中明确指定 NDK_TOOLCHAIN_VERSION=4.6 我的编译器标志是: LOCAL_CFLAGS += -std=c99 -ffast-math -march=armv5te -mfpu=vfp -mfloat-abi=softfp […]