Android 使用SWIG生成Jni代码
一,下载SWIG,并设置好环境变量
二以HelloJni为例子
导入ndk sample的HelloJni工程。
三 创建SWIG接口文件
在jni目录下新建文件Unix.i,输入SWIG代码:
- %module Unix
- %{
- #include <unistd.h>
- %}
- typedef unsigned int uid_t;
- 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文件:
- ifndef MY_SWIG_PACKAGE
- $(error MY_SWIG_PACKAGE is not defined.)
- endif
- MY_SWIG_OUTDIR:=$(NDK_PROJECT_PATH)/src/$(subst .,/,$(MY_SWIG_PACKAGE))
- ifndef MY_SWIG_TYPE
- MY_SWIG_TYPE:=C
- endif
- #ifeq($(MY_SWIG_TYPE),cxx)
- # MY_SWIG_MODE:=c++
- #else
- # MY_SWIG_MODE:=
- #endif
- LOCAL_SRC_FILES+=$(foreach MY_SWIG_INTERFACE,\
- $(MY_SWIG_INTERFACES),\
- $(basename $(MY_SWIG_INTERFACE))_wrap.$(MY_SWIG_TYPE))
- #LOCAL_CPP_EXTENSION+=.cxx
- %_warp.$(MY_SWIG_TYPE) : %.i \
- $(call host-mkdir,$(MY_SWIG_OUTDIR)) \
- swig -java \
- $(MY_SWIG_MODE) \
- -package $(MY-SWIG_PACKAGE) \
- -outdir $(MY_SWIG_OUTDIR) \
- $<
修改jni目录下的Android.mk:
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := hello-jni
- LOCAL_SRC_FILES := hello-jni.c
- MY_SWIG_PACKAGE:=com.apress.swig
- MY_SWIG_INTERFACES:=Unix.i
- MY_SWIG_TYPE:=c
- include $(LOCAL_PATH)/my-swig-generate.mk
- include $(BUILD_SHARED_LIBRARY)
编译ndk.
六 加入调用代码
修改HelloJni.java:
- TextView tv = new TextView(this);
- tv.setText( stringFromJNI() +" uid:"+Unix.getuid());
- setContentView(tv);
编译运行
代码下载 http://download.csdn.net/detail/hai836045106/7937337
Android 使用SWIG生成Jni代码的更多相关文章
- Android 使用SWIG生成Jni代码<转>
http://blog.csdn.net/u010780612/article/details/51066819 感觉也就那样把,我没有编译成功,实用性暂时没看到多大优点...
- 教会你彻底解决android studio c/c++ jni代码无法跳转
时不时总会遇到原来c c++ jni代码跳转很欢乐,突然也不知道咋滴了build也能build成功,运行也能正常运行,就是代码不能跳转了,首先来科普下一些背景知识. 如果让代码跳转起来,大概需要做哪些 ...
- android studio下生成jni头文件
cd app/src/main javah -d jni -classpath ../../build/intermediates/classes/debug net.sourceforge.lame ...
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...
- ubuntu下整合eclipse和javah生成jni头文件开发android的native程序(转)
本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的javah命令,第二种为整合javah到eclipse里面.推荐第二种方式,方便快捷,随时修改随时生成 0:前提和条件: 1:u ...
- ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的helloword工程,总是不成功,工程名字也就由helloow ...
- Android NDK入门实例 计算斐波那契数列一生成jni头文件
最近要用到Android NDK,调用本地代码.就学了下Android NDK,顺便与大家分享.下面以一个具体的实例计算斐波那契数列,说明如何利用Android NDK,调用本地代码.以及比较本地代码 ...
- [转]ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
转载自:http://blog.csdn.net/jiuyueguang/article/details/9404237 本文介绍两种利用javah命令生成jni头文件的方法,第一种为大众所知的jav ...
- javah生成jni头文件时报错 Error: cannot access android.support...
javah生成jni头文件时报错: Error: cannot access android.support.v7.app.AppCompatActivity class file for andro ...
随机推荐
- 面试题13:在O(1)时间删除链表节点
注意分情况讨论: 1. 要删除的不是尾节点 2. 链表只有一个节点 3. 链表中有多个节点,删除尾节点 void DeleteNode(ListNode** pListHead, ListNode* ...
- vue使用路由判断是否登录
router.beforeEach((to, from, next) => { // console.log('to:' + to.path) if (to.path.startsWith('/ ...
- Wannafly挑战赛7 D - codeJan与青蛙
codeJan喜欢观察世界.有一天,codeJan发现一个非常奇怪的现象.有一些年轻的青蛙聚集在一条直线上的某些位置上,同一个位置可能有多个青蛙.这些青蛙每次只会向前跳一米,并且每只青蛙每跳一次都会发 ...
- ajax个人总结
ajax是什么? AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...
- 【Splay 总结】
很多年前学的splay已经忘了? BZOJ 3729 要用Splay啊哭..强制在线.. 二叉查找树 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree ...
- 矩阵&行列式
# 代数 排列 对换,对于一个排列操作,对于一个偶排列一次对换之后变为奇排列 反之变为偶排列 行列式 N阶行列式室友N^2个数aij(i,j = 1,2,3,...n) 行列式的数=\(\sum_ { ...
- [BZOJ2427][HAOI2010]软件安装(Tarjan+DP)
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1987 Solved: 791[Submit][Statu ...
- pat 打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两 ...
- [转]Android Studio常用快捷键
(会持续更新)这边讲的常用快捷键是指做完Keymap到Eclipse后的,不是纯Android Studio的,这边主要讲下比较常用的一些快捷键: Ctrl+G / Ctrl+Alt+Shift+G: ...