android.mk so输出路径,通过ndk导出aar和so库文件供其他android项目使用

目标

根据项目的需求,我们用纯c实现的模块,需要移植到android设备中,制作java版本的sdk,我们需要用到jni和ndk。

下面用实例一步一步介绍这个过程。目标如下:

c源接口

java目标接口

#include

#include

#include

#ifndef USER_H

#define USER_H

/**

* 数字加法

*/

int my_fun1(int a,int b);

/**

* 连接字符串

*/

char* my_fun2(char *s1, char *s2);

#endif // USER_H

/**

* 整数加法

* @param a

* @param b

* @return int

*/

public static int myFun1(int a, int b) {}

/**

* 字符串拼接

* @param a

* @param b

* @return String

*/

public static String myFun2(String a, String b) {}

第一阶段:ndk项目内联合调试

1.1、建立一个项目MySdkDemo

7fb50a09b75127a3d6566ba5c20fb574.png

这里建立的一个MainActivity是用来做项目内调试的

1.2、在MySdkDemo内建立一个模块MySdkLibrary

这个module就是用来制作aar包和so库的,其中MySdk就是对外的接口的类名

cbd63223d187e22aa9a45d6c596744ed.png

1.3、在MySdkLibrary建立一个类MySdk,编写native方法,并生成jni头文件

为什么要写native,为什么要写jni头文件,这里不展开,请参考附后的参考文章。

其实jni头文件可以自己编写,当时java和c的对应规则比较变态,建议用javah命令生成

在包 com.dqz.www.mysdklibrary中建立类文件MySdk,代码如下,

package com.dqz.www.mysdklibrary;

/**

* Created by 等钱中 on 16/7/29.

*/

public class MySdk {

/**

* 整数加法

*

* @param a

* @param b

* @return int

*/

public native int fun1(int a, int b);

/**

* 字符串拼接

*

* @param a

* @param b

* @return String

*/

public native String fun2(String a, String b);

}

以上代码并不是最终代码,是用来生成jni头文件用的

转到命令行窗口,执行javah

King-4:java dengqianzhong$ cd mysdklibrary/src/main/java

King-4:java dengqianzhong$ javah com.dqz.www.mysdklibrary.MySdk

这时候,你会看见包根目录下多了一个com_dqz_www_mysdklibrary_MySdk.h头文件,

方法名字很长吧,不要怕,反正还有更长的,你也不用修改它。它的代码如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class com_dqz_www_mysdklibrary_MySdk */

#ifndef _Included_com_dqz_www_mysdklibrary_MySdk

#define _Included_com_dqz_www_mysdklibrary_MySdk

#ifdef __cplusplus

extern

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值