Android NDK一键编译

android平台下如果要进行c/c++开发,是需要借助ndk这个开发工具的,ndk环境搭建无论是windows还是mac平台下,都比较的简单(百度一下)。本文着重介绍,ndk的编译,编译也有2中方式,第一种最原始的也是最通用的命令行的方式,第二种是一键编译(编写脚本)。而实现java和C/C++沟通的桥梁就是jni,实现jni首先就是为包含native方法的java文件生成相应的点h头文件!

一、命令行方式:

1.android studio(Mac)中如何利用命令行生成.h文件。

android studio中内置一个终端 Terminal ,非常的好用!该终端的默认地址是该工作空间的根目录。在Mac下可以利用ls 命令遍历根目录下的所有文件夹。然后利用javah命令生成头文件。例如我的Module名叫cc,所以首先 cd  cc/src/main/java  然后敲javah命令。


-d ../jni是生成和java文件同级的jni文件夹 -jni是对CDemo.java(包含native方法 ,使用全类名)文件,生成.h头文件!  至于编译看下面的一键编译。


2.Windows平台下的,如何在eclipse中利用命令行生成.h 头文件:


首先按快捷键 Windows+R 然后输入cmd进入命令行终端。紧接着使用cd命令切换到 工作空间目录,然后cd 进入src目录;第一步首先对含有native方法的java文件进行编译,使用javac命令。 然后使用javah命令进行编译生成头文件。与mac平台下的android studio相比多了javac的命令行操作。编译结果如下:


接下来进行编译:需要使用ndk-build命令,如下图:(首先确保你的ndk已经安装好,ndk的环境搭建比较简单,网上方法比较多,百度下就有。)


第一步依然是进入工作空间的根目录,进入之后直接敲ndk-build命令就行了!编译结果如下图:


可以看见libs目录下面多了armeabi文件夹,下面多了cc库。执行ndk-build命令之前还要编写Android.mk脚本文件。其中LOCAL_MODULE表示库的名字,最后会加上前缀lib和后缀.so ,使用System.loadLibrary的时候只需填上cc即可,LOCAL_SRC_FILES表示实现上面.h头文件的实现文件cpp文件(当然也可以是.c文件)。


以上命令,如果在做项目的过程中一直敲的话,着实比较的蛋疼,因为我们往往更加的关心程序的逻辑处理而不是工具的使用,下面就来介绍一键编译!


二、一键编译:

1.windows平台下面怎么使用eclipse的方式进行一键编译:

首先必须要生成对应的.h头文件。如图点击External Tools Configurations...



在Program上右键单击,然后新建,按如下图操作:


-classpath ${project_loc}\bin\classes -d ${project_loc}\jni -jni ${java_type_name}  6处直接复制这句就行。

紧接着按照这两副图操作一键编译生成.h文件的脚本就生成功了。




最后点击Apply之后点击Close,这样一键生成.h文件就完成了。下面来测试下:


当然,我们还并不满足于这。同样,ndk-build也是可以配置的,按照下图即可完成!

首先依然是点击External Tools Configurations...然后新建脚本。


这样都配置完成之后,确保你工程里面的application.mk和Android.mk文件(文件需自己新建)都存在后,然后选中项目,点击NDK_build即可一键编译了!


2.Mac平台下怎么使用android studio(2.2.3)进行一键编译:

首先还是配置快捷生成.h文件的脚本:点击Configure.






Program:/usr/bin/javah  
Parameters: -v -jni -d $ModuleFileDir$/src/main/jni $FileClass$  
Working directory: $SourcepathEntry$ 

如果是Windows平台 Program:javah

最后在项目工程写有native方法的java文件上右击选择Android Tools(名字自己取的),点击里面的JavaH脚本即可在jni目录下面生成.h头文件.

接下来需要编译:

android studio工程比较麻烦,idk需要在gradle中配置,就相当于eclipse中的mk文件:

1.首先在local.properties文件中添加ndk的目录,比如:/Users/zhulei/android-ndk-r13 或者右键工程open module settings 可视化界面选择ndk目录。

2.在gradle.properties文件中末尾添加 android.useDeprecatedNdk=true

3.最后在项目的gradle文件中添加ndk的配置:


ndk{
            moduleName"test"

            ldLibs "log", "z", "m"

            abiFilters "armeabi", "armeabi-v7a", "x86"
        }
其中moduleName便是生成的动态库的名字  ldLIbs 表示jin用到的库,abiFilters 表示用到的平台。

最后编写.h的实现类,然后点击Build后点击Make Project或则锤子标识按钮之后就开始编译了,编译成功后可在项目的build/intermediates/ndk/debug/lib目录下找到编译成功的so文件。


三、关联源码

如果是android studio的话,直接就关联源码了,但是如果是eclipse的话,就需要在新建的工程上右键单击Android Tools 然后Add Native Support,之后就关联android stuio源码了。(如果写的什么问题,欢迎下方留言,大家共同讨论,共同进步!)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值