一,下载SWIG,并设置好环境变量

二以HelloJni为例子

导入ndk sample的HelloJni工程。

三 创建SWIG接口文件

在jni目录下新建文件Unix.i,输入SWIG代码:

  1. %module Unix
  2. %{
  3. #include <unistd.h>
  4. %}
  5. typedef unsigned int uid_t;
  6. extern uid_t getuid(void);

在src目录下创建代理类的包,名为:com.apress.swig

四在命令行下调用SWIG

在项目根目录下执行

swig -Java -package com.apress.swig -outdir src/com/apress/swig jni/Unix.i

执行成功后会在src/com.apress.swig包下生成Javajni代码,在jni目录下会有Unix_wrap.c文件。

五将SWIG集成到Android构造过程中

在jni目录下创建my-swig-generate.mk文件:

  1. ifndef MY_SWIG_PACKAGE
  2. $(error MY_SWIG_PACKAGE is not defined.)
  3. endif
  4. MY_SWIG_OUTDIR:=$(NDK_PROJECT_PATH)/src/$(subst .,/,$(MY_SWIG_PACKAGE))
  5. ifndef MY_SWIG_TYPE
  6. MY_SWIG_TYPE:=C
  7. endif
  8. #ifeq($(MY_SWIG_TYPE),cxx)
  9. #   MY_SWIG_MODE:=c++
  10. #else
  11. #   MY_SWIG_MODE:=
  12. #endif
  13. LOCAL_SRC_FILES+=$(foreach MY_SWIG_INTERFACE,\
  14. $(MY_SWIG_INTERFACES),\
  15. $(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))
  16. #LOCAL_CPP_EXTENSION+=.cxx
  17. %_warp.$(MY_SWIG_TYPE) : %.i \
  18. $(call host-mkdir,$(MY_SWIG_OUTDIR)) \
  19. swig -java \
  20. $(MY_SWIG_MODE)  \
  21. -package $(MY-SWIG_PACKAGE)  \
  22. -outdir $(MY_SWIG_OUTDIR)   \
  23. $<

修改jni目录下的Android.mk:

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE    := hello-jni
  4. LOCAL_SRC_FILES := hello-jni.c
  5. MY_SWIG_PACKAGE:=com.apress.swig
  6. MY_SWIG_INTERFACES:=Unix.i
  7. MY_SWIG_TYPE:=c
  8. include $(LOCAL_PATH)/my-swig-generate.mk
  9. include $(BUILD_SHARED_LIBRARY)

编译ndk.

六 加入调用代码

修改HelloJni.java:

  1. TextView  tv = new TextView(this);
  2. tv.setText( stringFromJNI() +" uid:"+Unix.getuid());
  3. setContentView(tv);

编译运行

代码下载 http://download.csdn.net/detail/hai836045106/7937337

Android 使用SWIG生成Jni代码的更多相关文章

  1. Android 使用SWIG生成Jni代码<转>

    http://blog.csdn.net/u010780612/article/details/51066819 感觉也就那样把,我没有编译成功,实用性暂时没看到多大优点...

  2. 教会你彻底解决android studio c/c++ jni代码无法跳转

    时不时总会遇到原来c c++ jni代码跳转很欢乐,突然也不知道咋滴了build也能build成功,运行也能正常运行,就是代码不能跳转了,首先来科普下一些背景知识. 如果让代码跳转起来,大概需要做哪些 ...

  3. android studio下生成jni头文件

    cd app/src/main javah -d jni -classpath ../../build/intermediates/classes/debug net.sourceforge.lame ...

  4. 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...

  5. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序(转)

    本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的javah命令,第二种为整合javah到eclipse里面.推荐第二种方式,方便快捷,随时修改随时生成 0:前提和条件: 1:u ...

  6. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...

  7. Android NDK入门实例 计算斐波那契数列一生成jni头文件

    最近要用到Android NDK,调用本地代码.就学了下Android NDK,顺便与大家分享.下面以一个具体的实例计算斐波那契数列,说明如何利用Android NDK,调用本地代码.以及比较本地代码 ...

  8. [转]ubuntu下整合eclipse和javah生成jni头文件开发android的native程序

    转载自:http://blog.csdn.net/jiuyueguang/article/details/9404237 本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的jav ...

  9. javah生成jni头文件时报错 Error: cannot access android.support...

    javah生成jni头文件时报错: Error: cannot access android.support.v7.app.AppCompatActivity class file for andro ...

随机推荐

  1. WinPhone8 开发(一)[SDK安装+新建项目]

    微软 WinPhone8 开发 winphone8 SDK下载地址,见博客:http://blog.csdn.net/attagain/article/details/8509511 SDK安装界面: ...

  2. Codeforces Round #285 (Div. 1) B - Misha and Permutations Summation 康拓展开+平衡树

    思路:很裸的康拓展开.. 我的平衡树居然跑的比树状数组+二分还慢.. #include<bits/stdc++.h> #define LL long long #define fi fir ...

  3. bzoj 1131 简单树形dp

    思路:随便想想就能想出来啦把...  卡了我一个vector... #include<bits/stdc++.h> #define LL long long #define fi firs ...

  4. vs 单元测试

    vs 2010 NOget 包 安装NUnitTDNet,下载TestDriven.NET(http://www.testdriven.net/). 准备动作 先到http://www.testdri ...

  5. 洛谷P1291 [SHOI2002]百事世界杯之旅 [数学期望]

    题目传送门 百事世界杯之旅 题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听, ...

  6. 11.6八校联考T1,T2题解

    因为版权问题,不丢题面,不放代码了(出题人姓名也隐藏) T1 这,是一道,DP题,但是我最开始看的时候,我思路挂了,以为是一道简单题,然后就写错了 后来,我正确理解题意后写了个dfs,幸亏没有记忆化, ...

  7. Unity 2D游戏开发教程之使用脚本实现游戏逻辑

    Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...

  8. java8新特性——方法引用与构造器引用

    上篇文章简单学习了java8内置得4大核心函数式接口,这类接口可以解决我们遇到得大多数得业务场景得问题.今天来简单学习一下方法引用与构造器引用. 一.方法引用 方法引用:若lambda 体中得内容已经 ...

  9. uoj 48 核聚变反应强度 次小公因数

    [UR #3]核聚变反应强度 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/48 Description 著名核 ...

  10. 模板引擎之hogan.js

    hogan.js 语法简单,且支持循环数据: 基本语法: 1. 标签可以嵌套使用 2. {{data}} 转义的变量,不会渲染html标签 3. {{{data}}} 不转义的变量,会渲染html标签 ...