转自: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>

0x3:生成文件头.h文件

在这个目录可以看到我们编写好并且已经编译的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学习的更多相关文章

  1. Linux下librdkafka客户端的编译运行

    Linux下librdkafka客户端的编译运行 librdkafka是一个开源的Kafka客户端C/C++实现,提供了Kafka生产者.消费者接口. 由于项目需要,我要将Kafka生产者接口封装起来 ...

  2. .netcore在linux下使用P/invoke方式调用linux动态库

    http://www.mamicode.com/info-detail-2358309.html   .netcore下已经实现了通过p/invoke方式调用linux的动态链接库(*.so)文件 1 ...

  3. Linux下编译生成SO并进行调用执行

    Linux下编译生成SO并进行调用执行 参考博客的博客: C编译: 动态连接库 (.so文件) - Vamei - 博客园 (cnblogs.com) C 多个动态库存在同名函数问题处理方法:-fvi ...

  4. [转]Caffe在Linux下的安装,编译,实验

    Caffe在Linux下的安装,编译,实验  原文地址:http://www.cnblogs.com/evansyang/p/6150118.html 第一部分:Caffe 简介 caffe是有伯克利 ...

  5. Linux下FFmpeg的安装编译过程【转】

    本文转载自:http://www.linuxidc.com/Linux/2013-06/85628.htm 详细说下在Linux下FFmpeg的安装编译过程.参考 Ubuntu 10.04安装编译FF ...

  6. linux下SVN忽略文件/文件夹的方法

    linux下SVN忽略文件/文件夹的方法 假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录) ...

  7. 在Linux下访问Windows共享目录的配置方法

    在Linux下访问Windows共享目录的配置方法 1.在Windows上设置一个共享目录 如:将d:\RedHat_disk设置为共享目录 2.在Windows上创建一个用户,如tommy,密码11 ...

  8. Linux下查看线程数的几种方法汇总

    Linux下查看线程数的几种方法汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux下查看某个进程的线程数量 pstree命令以树状图显示进程间的关系(display ...

  9. Linux下查看磁盘挂载的几种方法

    Linux下查看磁盘挂载的几种方法 第一种方法:df命令 # df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtm ...

随机推荐

  1. CentOS7下,安装网卡驱动,命令行手动连接WIFI指导

    买了一个无线网卡,型号为TL-WN823N,谁知道在CentOS下没有驱动 于是开始了无线上网的漫漫征途 经历了无数个坑啊,解决了一个又一个的问题啊 到最后ping通的时候成就感简直爆棚 文章结构简介 ...

  2. iptables 执行清除命令 iptables -F 要非常小心

    使用 /sbin/iptables -F 要小心,搞不好,你就马上同服务器断开连接了 以下是来自 http://wiki.ubuntu.org.cn/IptablesHowTo 上的说明 可以通过/s ...

  3. 使用maven进行Javadoc下载

    project -> maven -> Download Sources and Download JavaDocs

  4. HDU 1495 非常可乐【BFS/倒水问题】

    非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  5. 【ZOJ】3785 What day is that day? ——KMP 暴力打表找规律

    转自:http://www.cnblogs.com/kevince/p/3887827.html 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这么一说大家心里肯定有数了吧,“不就是nex ...

  6. 让你的mysql或mariadb 支持ipv6

    如果你在windows 或Linux系统已经安装了mysql/mariadb,并且操作系统本身已经支持了ipv6. 在/etc/my.conf 这样配置可以让mysql也支持ipv6 [mysqld] ...

  7. Cocos2dx-Lua UIScrollView 和 UITableView 对比

    为什么写这个 上面这个问题的答案也是我写这篇文章的初衷,在最近给游戏添加一些列表的时候,对比着应用了一下他们两个,在它们两个之间的优劣势之间进行取舍,就有了这个问题的答案. 按照我一个iOS开发而言, ...

  8. Android学习--探究服务(二)

    服务的基本用法 定义服务: 我们需要先创建服务,我们要使用就的利用一个类去继承它,然后重写它的几个方法,具体的我们看下面的代码: 我们重写了下面三个方法: * onCreate()           ...

  9. Tarjan+topsort(DP)【P3387】 [模板]缩点

    Description 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次 ...

  10. 最小生成树Kruskal+LCA+bfs【bzoj4242】水壶

    Description JOI 君所居住的 IOI 市以一年四季都十分炎热著称. IOI 市被分成 \(H\) 行,每行包含 \(W\) 块区域.每个区域都是建筑物.原野.墙壁之一. IOI 市有 \ ...