2012-11-06 65 views
0

我正在研究使用某些Android私有API的應用程序。我將其作爲完整Android(CM10)源代碼的一部分爲我的手機配置。生成的二進制文件在該設備上運行良好,但在具有相同Android版本的其他設備上引發了分段錯誤。這不是缺少API的問題,因爲即使是一個簡單的hello world編譯,也會引發Segfault。下面是一個示例代碼:如何使用Android私有API構建便攜式二進制文件

HELLO-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源代碼中構建它時,它不是。

我想問題是一個鏈接器配置,但我不知道如何調試或修復此問題。

+0

用strace運行應用程序以查看導致段錯誤的原因。 – auselen

回答

0

我終於明白出了什麼問題。這兩款設備使用了不兼容的C++編譯器標誌的不同Android版本。將兩臺設備更新到完全相同的版本後,問題消失。

儘管無法使用私有Android API編譯單個可移植二進制文件,但可以爲每個主要Android版本編譯單獨的二進制文件,並將它們與應用程序一起發佈。我更詳細地描述了這個解決方案on my blog