Linux下安卓ndk混合编译调用so方法——QuickStart学习
转自:http://www.52pojie.cn/thread-313869-1-1.html
#注意:.h 和.c中的错误eclipse不会检查,只会调用时在手机或虚拟机中死掉。因此需要仔细检查其中的语法和命名。
#Java_com_example_testforso_JniGg_ggPrintHello:Java_包名_类名_函数名
#(JNIEnv * env, jclass this)前两个参数固定。
system.loadlibrary("so名称"),与android.mk中的LOCAL_MODULE := & LOCAL_SRC_FILE := 的值对应
x1:新建立一个安卓工程

0x2:编写调用so代码和方法定义
在MainActivity.java同目录下创建一个JniGg.java文件,用于调用so
<ignore_js_op>
在这个目录可以看到我们编写好并且已经编译的class文件,eclipse是自动编译的。
<ignore_js_op>
一切正常编译,那么现在我们回到工程根目录下:
<ignore_js_op>
然后在命令行切换到此目录:
<ignore_js_op>
现在我们使用下面的命令:javah -classpath bin/classes -d jni com.ggndktest1.JniGg
<ignore_js_op>
不报错,并且成功编译出.h文件,才算成功的。
上面需要注意的是那个bin/classes,因为我的电脑上编译完的classes目录是这个样子的,参照上文那个文件目录的截图图片,个别电脑上不需要/classes。然后在Eclipse,右击工程,进行刷新,可以看到如下截图:

0x4:编写c代码

在jni目录下新建file,gg-jni.c自己看看代码,也就知道啥意思了

然后就是Android.mk文件的编写了

0x5:生成so文件

切换到工程根目录,然后直接ndk-build即可。这里需要注意,ndk-build需要配置环境变量,自行搜索配置方法即可。
0x6:android调用代码

新建一个TextView,然后显示so里面的字符串。然后运行我们的测试代码:

最后代码
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_testforso_JniGg */ #ifndef _Included_com_example_testforso_JniGg
#define _Included_com_example_testforso_JniGg
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_testforso_JniGg
* Method: ggPrintHello
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_testforso_JniGg_ggPrintHello
(JNIEnv *, jclass); JNIEXPORT jint JNICALL Java_com_example_testforso_JniGg_getCoin
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif
#include "com_example_testforso_JniGg.h" JNIEXPORT jstring JNICALL Java_com_example_testforso_JniGg_ggPrintHello
(JNIEnv * env, jclass this)
{
return (*env)->NewStringUTF(env, "Hello!!!");
} JNIEXPORT jint JNICALL Java_com_example_testforso_JniGg_getCoin
(JNIEnv * env, jobject this)
{
int c=; return c;
}
package com.example.testforso;
public class JniGg {
static {
System.loadLibrary("gg-jni");
}
static public native String ggPrintHello();
static public native int getCoin();
}
TextView tview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tview=(TextView) this.findViewById(R.id.coin); tview.setText(JniGg.ggPrintHello()+JniGg.getCoin());
}
相关附件和文档:
http://pan.baidu.com/s/1pJ2Y047
Linux下安卓ndk混合编译调用so方法——QuickStart学习的更多相关文章
- Linux下librdkafka客户端的编译运行
Linux下librdkafka客户端的编译运行 librdkafka是一个开源的Kafka客户端C/C++实现,提供了Kafka生产者.消费者接口. 由于项目需要,我要将Kafka生产者接口封装起来 ...
- .netcore在linux下使用P/invoke方式调用linux动态库
http://www.mamicode.com/info-detail-2358309.html .netcore下已经实现了通过p/invoke方式调用linux的动态链接库(*.so)文件 1 ...
- Linux下编译生成SO并进行调用执行
Linux下编译生成SO并进行调用执行 参考博客的博客: C编译: 动态连接库 (.so文件) - Vamei - 博客园 (cnblogs.com) C 多个动态库存在同名函数问题处理方法:-fvi ...
- [转]Caffe在Linux下的安装,编译,实验
Caffe在Linux下的安装,编译,实验 原文地址:http://www.cnblogs.com/evansyang/p/6150118.html 第一部分:Caffe 简介 caffe是有伯克利 ...
- Linux下FFmpeg的安装编译过程【转】
本文转载自:http://www.linuxidc.com/Linux/2013-06/85628.htm 详细说下在Linux下FFmpeg的安装编译过程.参考 Ubuntu 10.04安装编译FF ...
- linux下SVN忽略文件/文件夹的方法
linux下SVN忽略文件/文件夹的方法 假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录) ...
- 在Linux下访问Windows共享目录的配置方法
在Linux下访问Windows共享目录的配置方法 1.在Windows上设置一个共享目录 如:将d:\RedHat_disk设置为共享目录 2.在Windows上创建一个用户,如tommy,密码11 ...
- Linux下查看线程数的几种方法汇总
Linux下查看线程数的几种方法汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux下查看某个进程的线程数量 pstree命令以树状图显示进程间的关系(display ...
- Linux下查看磁盘挂载的几种方法
Linux下查看磁盘挂载的几种方法 第一种方法:df命令 # df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtm ...
随机推荐
- seneca的一段代码(原创)
var seneca=require('seneca')() seneca.add({cmd:'wordcount'},function(msg,respond){ var length=0; if( ...
- Servlet response原理
首先web服务器 接受到http请求后转交给相应的servlet进行处理这个过程可以他通过配置web.xml来进行确定,然后web服务器将相应的信息封装到request和response对象,由相应的 ...
- 部署web应用到虚拟主机的三种方式
方式一: 在 [tomcat]/conf/server.xml 文件中的<Engine>标签下的<Host>标签内部, 添加一个 <Context ...
- 从sizeof(string)到引用计数的漫游
前言: 说是漫游,其实就是扯,一点一点的扯. 话说之前参加华为的德州扑克比赛,我用C++解析消息的时候碰到一个小问题,就是定长收消息的时候出错,在Linux下调了很久很久,终于发现,sizeof(st ...
- Codeforces 1023 B.Pair of Toys (Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Fi)
B. Pair of Toys 智障题目(嘤嘤嘤~) 代码: 1 //B 2 #include<iostream> 3 #include<cstdio> 4 #include& ...
- 洛谷 P3371 【模板】单源最短路径 【链式前向星+SPFA】
题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出发点的编号. 接下来M行每行包含三 ...
- CF 990A. Commentary Boxes【数学/模拟】
[链接]:CF [题意]:对于一个数n,每次加一的代价是a,每次减一的代价是b,求被m整除时的最小代价. [分析]:分情况讨论,自己多举几个栗子. [代码]: #include<cstdio&g ...
- CF984 C. Finite or not?【数论/GCD】
[链接]:CF [题意]:n组样例,对于每组样例,给你三个数p q b,问你p/q在b进制下是不是一个有限小数,是的话输出Finite,否则输出Infinite. [分析]:b的过程是对q约分,那么只 ...
- codeforces 869A The Artful Expedient【暴力枚举/亦或性质】
A. time limit per test 1 second memory limit per test 256 megabytes input standard input output stan ...
- python3爬虫爬取网页思路及常见问题(原创)
学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...