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

近来有需求在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.c

LOCAL_CFLAGS := -O2 -g
LOCAL_CFLAGS += -DHAVE_CONFIG_H -D_U_="__attribute__((unused))" -Dlinux -D__GLIBC__ -D_GNU_SOURCE

LOCAL_MODULE := libpcap
include $(BUILD_STATIC_LIBRARY)

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

APP_MODULES := libpcap

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

运行ndk-build

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

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







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值