Связывание Android C-кода и ARM Assembler - PullRequest
5 голосов
/ 22 марта 2011

Я написал приложение для Android.Он использует основной модуль C-кода и связанный модуль C-кода.Теперь я хочу заменить связанный модуль на модуль ассемблера ARM.У кого-нибудь есть простой пример?

Ответы [ 3 ]

5 голосов
/ 24 марта 2011

Вот пример файла Android.mk, который будет собирать исходное дерево, содержащее сборку.Чтобы увидеть полный пример, проверьте пример hello-neon, распространяемый в пакете NDK.

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)
3 голосов
/ 16 сентября 2011

Я написал учебник, чтобы сделать именно это. http://www.eggwall.com/2011/09/android-arm-assembly-calling-assembly.html

Сборка ARM в Android не сложна, но есть много движущихся частей: вам нужны источник сборки, заглушка C, Makefile и "родные" методы Java-заглушки, которые вызывают базовый код сборки.

Вы можете скачать исходный код по ссылке выше и посмотреть, как он работает. Если у вас есть один рабочий пример, его легко сунуть и сделать так, чтобы он соответствовал вашим потребностям.

0 голосов
/ 27 марта 2013

Я видел статью от vikram. У меня есть мнение, что для новичков лучше создавать и запускать ассемблерный код в Android с использованием исходного кода Android.

например. Вы можете создать модуль со спецификацией "BUILD_EXECUTABLE" в Android.mk

Вы можете иметь функцию main внутри кода C и иметь встроенный код ассемблера вместе с main.c

Вы можете добавить такой модуль даже под gingebread/frameworks/base/<mymodule>

...