链接Android C代码和ARM汇编程序

时间:2011-03-22 11:32:45

标签: android assembly arm android-ndk

我写了一个Android应用程序。它使用主C代码模块和链接的C代码模块。现在我想用ARM汇编程序模块替换链接模块。有人有一个简单的例子吗?

3 个答案:

答案 0 :(得分:5)

这是Android.mk文件的一个示例,它将构建包含程序集的sourcetree。要查看完整示例,请检查NDK包中分发的hello-neon样本。

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_ARM_MODE := arm  # remove this if you want thumb mode
LOCAL_ARM_NEON := true # remove this if you want armv5 mode

LOCAL_CFLAGS :=  -std=c99 -pedantic -v

LOCAL_SRC_FILES := # list your C, C++ and assembly sources here.
           # assembly source files ends with extension .S
           # add .arm after the extension if you want to compile in armv5 mode (default is thumb)
           # add .arm.neon to compile in armv7 mode

LOCAL_C_INCLUDES := $(LOCAL_PATH)

LOCAL_LDLIBS := -llog

LOCAL_MODULE := #the name of your shared library

include $(BUILD_SHARED_LIBRARY)

答案 1 :(得分:3)

我写了一篇教程来做到这一点。 http://www.eggwall.com/2011/09/android-arm-assembly-calling-assembly.html

Android中的ARM程序集并不困难,但有很多动作:你需要一个汇编源代码,一个C stub,一个Makefile,以及调用底层汇编代码的Java stub“native”方法。

您可以从上面的链接下载源代码,看看它是如何工作的。一旦你有一个工作的例子,很容易戳,并使其符合你的需要。

答案 2 :(得分:0)

我看了vikram的文章我有一个观点,对于初学者来说,最好使用Android源代码在Android中构建和运行汇编程序代码。

e.g。您可以在BUILD_EXECUTABLE

中创建一个规范为“Android.mk”的模块

您可以在C代码中包含一个main函数,并使用main.c

构建汇编代码

您甚至可以在gingebread/frameworks/base/<mymodule>

下添加此类模块