Android ndk 如何使用Android私有API构建可移植二进制文件

Android ndk 如何使用Android私有API构建可移植二进制文件,android-ndk,android-source,cyanogenmod,Android Ndk,Android Source,Cyanogenmod,我正在开发一个应用程序,它使用了一些Android私有API。我将其作为为我的手机配置的完整Android(CM10)源代码的一部分构建。生成的二进制文件在该设备上运行良好,但在具有相同Android版本的其他设备上引发分段错误。这不是缺少API的问题,因为即使是以这种方式编译的简单hello world也会抛出SEGFULT。下面是一个示例代码: hello-cmd.cpp #include<stdio.h> int main(int argc, char* argv[]) {

我正在开发一个应用程序,它使用了一些Android私有API。我将其作为为我的手机配置的完整Android(CM10)源代码的一部分构建。生成的二进制文件在该设备上运行良好,但在具有相同Android版本的其他设备上引发分段错误。这不是缺少API的问题,因为即使是以这种方式编译的简单hello world也会抛出SEGFULT。下面是一个示例代码:

hello-cmd.cpp

#include<stdio.h>

int main(int argc, char* argv[]) {
    printf("Hello Command Line!");
    return 0;
}
当我用Android NDK构建以下代码时,它是可移植的。当我在android源代码中构建它时,它不是


我想问题出在链接器配置上,但我不知道如何调试或修复它。

我终于找到了问题所在。这两个设备使用不同的Android版本,带有不兼容的C++编译器标志。将两台设备更新到完全相同的版本后,问题消失了


虽然无法使用专用Android API编译单个可移植二进制文件,但可以为每个主要Android版本编译单独的二进制文件,并随应用程序一起发布。我更详细地描述了这个解决方案。

使用strace运行应用程序,看看是什么导致了分段错误。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-cmd
LOCAL_SRC_FILES := hello-cmd.cpp
include $(BUILD_EXECUTABLE)