安卓PREBUILT_SHARED_LIBRARY 与BUILD_SHARED_LIBRARY的区别
发布网友
发布时间:2022-06-09 12:19
我来回答
共1个回答
热心网友
时间:2023-09-29 02:22
简单介绍一下怎么在android上开发基本的C程序。
如果做过ARM的C应用程序开发的话会发现,ARM一般情况下提供了十分完备的编译器,而android没有而已(android提供了完善的Java层开发工具,C的却不是那么完善)。
1 编写hello.c
这个太简单了,不是么?
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
4.2 编写Android的编译器配置文件make_android
在Android SDK中,并没有提供Android系统的C编译器。就算是在NDK中,也只是提供了ndk-build工具,用来编译native static/dynamic library。只有仔细翻阅NDK的手册(它的手册位于NDK根目录的doc/OVERVIEW.html,比较简略),才会发现有一个STANDALONE-TOOLCHAIN的页面,会提到单独编译C Level应用程序的方法。我这里提供一段简单的makefile,命名文件为make_android,用来配置CC宏:
# make_android: this is a sub makefile for android native compile
# you have to set ANDROID_VER and ANDROID_ROOT to your flavor to work
### these two things have to be set first!!!
ANDROID_VER=android-8
ANDROID_ROOT=/home/xzpeter/android PLATFORM_DIR=${ANDROID_ROOT}/prebuilt/ndk/android-ndk-r4/platforms
SYSROOT=${PLATFORM_DIR}/${ANDROID_VER}/arch-arm EABI_GCC=${ANDROID_ROOT}/prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-gcc
CC=${EABI_GCC} --sysroot=${SYSROOT}
这里,ANDROID_ROOT和ANDROID_VER是需要针对自己的android source目录地址和android API level修改一下的。这里的android source是我用repo sync从github上mirror下来的android源代码。
4.3 编写Makefile
利用上面的make_android,写Makefile:
# to make x86 version of code, run: "make X86=1"
ifdef X86
CC=gcc
CLFAGS=-g
else
include make_android
endif
default: hello
hello: hello.o
clean: rm hello *.o
4 编译
可以用make X86=1先在本地编译一下,并运行./hello试试看。如果想编译android版本,先make clean一下,然后直接make就可以了。
5 在模拟器中运行
利用shell命令启动emulator并将文件放到目标模拟器上去:
emulator -avd my_avd # my_avd is my config name of avd
# wait for some time to boot up
adb push ./hello /data/hello
adb shell chmod 0755 /data/hello
adb shell ./data/hello
可以看到返回的”hello world!”字符串了。
PS:这是我偶然看到的一篇文章,感觉如果不是搞低层的,不必过于深入