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

时间:2012-11-06 17:53:01

标签: android-ndk android-source cyanogenmod

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

您好-cmd.cpp

#include<stdio.h>

int main(int argc, char* argv[]) {
    printf("Hello Command Line!");
    return 0;
}

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-cmd
LOCAL_SRC_FILES := hello-cmd.cpp
include $(BUILD_EXECUTABLE)

当我使用Android NDK构建以下代码时,它是可移植的。当我在android源代码中构建它时,它不是。

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

1 个答案:

答案 0 :(得分:0)

我终于弄明白了问题是什么。这两个设备使用不同的Android版本和不兼容的C ++编译器标志。将两个设备更新为完全相同的版本后,问题就消失了。

虽然使用私有Android API编译单个可移植二进制文件是不可能的,但是可以为每个主要Android版本编译单独的二进制文件并将其与应用程序一起发送。我更详细地描述了这个解决方案on my blog