编译Android .so文件

文章来自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-5208.html

说白了就是c代码做成动态库,被Java代码调用(JNI)。用C写不出可以直接在Android上跑的可执行程序来。

  NDK开发需要一个交叉编译环境,需要安装Cygwin, NDK。

  这些准备工作就不说了网上很多,当然也可以问我。

  讲一下.so文件的生成

  --------------------------------------------------------------------------------------------------------------------------------------------------

  编译Android .so文件

  <!--[if !supportLists]-->1. <!--[endif]-->定义native接口

  创建一个Android的项目 “ndk_plus”,添加一个JNI类。

(图)编译Android .so文件 编译Android .so文件


 

 

 

 <!--[endif]-->

  图1:Android的SDK项目

  // JNI.java Code:

  package kun.ndk.plus;public class JNI { public native int plus(int a, int b);}

  <!--[if !supportLists]-->2. <!--[endif]-->根据JNI.java文件生成相应的.h文件

  cmd到ndk_plus项目的bin目录,然后执行 javah ?classpath . ?jni kun.ndk.plus.JNI

  这样就会生成kun_ndk_plus_JNI.h头文件。内容如下:

  代码

  /* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class kun_ndk_plus_JNI */ #ifndef _Included_kun_ndk_plus_JNI#define _Included_kun_ndk_plus_JNI#ifdef __cplusplusextern "C" {#endif/* * Class: kun_ndk_plus_JNI * Method: plus * Signature: (II)I */JNIEXPORT jint JNICALL Java_kun_ndk_plus_JNI_plus (JNIEnv *, jobject, jint, jint); #ifdef __cplusplus}#endif#endif

  如果提示没有javah命令,则需要找到javah.exe所在目录(C:Program FilesJavajdk1.5.0in),并把这个目录添加到环境变量 PATH里。

  <!--[if !supportLists]-->3. <!--[endif]-->根据.h文件实现相应的.c文件

  在Eclipse(其它编辑工具均可)里创建kun_ndk_plus_JNI.c文件

  //-------------------------------------------------------------------------------------------------------------#include

  #include "kun_ndk_plus_JNI.h"

  JNIEXPORT jint JNICALL Java_kun_ndk_plus_JNI_plus

  (JNIEnv *e, jobject j, jint a, jint b)

  {

  return a + b;

  }

  //-------------------------------------------------------------------------------------------------------------

  注意红色部分。由于生成的.h中的函数声明并没有形参,实现时需要自己添加形参变量。

  还要注意的是要在蓝色的大括号后面添加一个回车(gcc 编译器的特点)。

  <!--[if !supportLists]-->4. <!--[endif]-->制作.mk文件

  在NDK目录下的apps目录下新建plus文件夹,在这个文件夹下创建一个txt文件,

  输入一下内容:

  APP_PROJECT_PATH := $(call my-dir)

  APP_MODULES := plus

  并重命名为Application.mk

  在NDK/sources/samples目录下新建plus文件夹, 在这个文件夹下创建一个txt文件,输入以下内容:

  LOCAL_PATH := $(call my-dir)

  include $(CLEAR_VARS)

  LOCAL_MODULE := plus

  LOCAL_SRC_FILES := kun_ndk_plus_JNI.c

  include $(BUILD_SHARED_LIBRARY)

  并重名名为Android.mk。把.c和.h文件拷贝到这个文件夹下。

  //关键字具体含义看doc/ OVERVIEW.TXT

  <!--[if !supportLists]-->5. <!--[endif]-->编译

  启动Cygwin, cd到NDK目录

  make APP=plus

(图)编译Android .so文件 编译Android .so文件


 

 

 <!--[endif]-->

  成功后会在apps/plus/libs/armeabi下有一个libplus.so文件。

  6. 后面就是把.so文件加到Android工程中在java代码中使用了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值