Linux Android NDK r7开发技巧,应用程序/库

来源:互联网 发布:淘宝卖家多发货 编辑:程序博客网 时间:2024/05/04 05:06

近来有需求在Android下开发程序,由于性能的需求,不能使用java语言来实现效率要求较高的代码;

下载了最新的r7 NDK,解压到某一Linux目录

1.设置环境变量,下面语句加入到.bash_profile中:

export NDK_HOME=<path to android ndk>

export PATH=$NDK_HOME:$PATH

之后就可以在任意工程目录里运行ndk-build来编译自己的程序了

2.Android NDK r7在默认的工程目录结构上和之前的NDK相比有一定的改变(本人没有使用过其他版本,但是单依据网上搜索到的文章来实现已经行不通了)

<Project dir>

-Application.mk//如果为应用程序,一般会有这个文件,静态编译时该文件在jni目录下

-default.properties//可以确定使用的API集合

-<jni> //源文件目录

-Android.mk//类似于makefile文件

-*.h *.c *.cpp//源文件

  • Application.mk格式

    一般只有这句:
    APP_PROJECT_PATH := $(call my-dir)
    如果如果ndk为r7版本,并且为静态库编译,则应该将该文件放置到jni目录下,并且使用这句
    APP_MODULES := lib<name> //name为你的库名称

  • default.properties格式,工程一般应该有这个文件:
    target=android-8 //使用的目标机器API版本
  • Android.mk
    LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := <输出文件名字>LOCAL_SRC_FILES := ... //列出你所有的.c .cpp源文件LOCAL_CFLAGS := -O2 -g -DANDROID_ARM //加入你希望的编译选项LOCAL_LDLIBS += -lc  //这个是链接选项include $(BUILD_SHARED_LIBRARY)//这里可以设置生成的目标文件类型(BUILD_SHARED_LIBRARY是动态加载库,BUILD_STATIC_LIBRARY是静态库,BUILD_EXECUTABLE则可直接作为应用程序编译)

3.在工程目录下运行ndk-build,也可以在任意目录下运行ndk-build -C <Project dir>来编译,编译结果一般在<Project dir>/libs/armeabi/下


下面是一个编译libpcap的例子:


1.从网上搜索的android官方发布的libpcap git源地址已经改变了,现在其域名为:

https://android.googlesource.com/


2.下载libpcap的git源,运行:git clone https://android.googlesource.com/platform/external/libpcap.git

3.将libpcap下所有文件移入libpcap工程目录的jni目录下面

4.Android.mk内容如下

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := \        bpf_dump.c \        bpf/net/bpf_filter.c  \        bpf_image.c  \        etherent.c  \        fad-gifc.c  \        gencode.c  \        grammar.c  \        inet.c  \        nametoaddr.c  \        optimize.c  \        pcap.c \        pcap-linux.c \        savefile.c \        scanner.c \        version.cLOCAL_CFLAGS := -O2 -gLOCAL_CFLAGS += -DHAVE_CONFIG_H -D_U_="__attribute__((unused))" -Dlinux -D__GLIBC__ -D_GNU_SOURCELOCAL_MODULE := libpcapinclude $(BUILD_STATIC_LIBRARY)

5.注意为静态编译,jni目录下还应该有一个Application.mk文件

APP_MODULES := libpcap

6.cd到工程目录(也就是jni的上一级)

运行ndk-build

7.不出问题的话,将能在<工程目录>/libs/armeabi/下找到libpcap.a

8.之后的文件就可以直接使用libpcap的头文件并链接这个库来编译了







原创粉丝点击