转自: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. 在阿里云“专有网络”网络类型中配置vsftpd

    原文地址:传送门 环境:云服务器ECS,网络类型为“专有网络”,创建ECS绑定公网IP:系统镜像为Debian 8  现象:FTP客户端可以连接FTP服务端,但“读取目录列表失败”.       原因 ...

  2. 内部网络出口防火墙导致TCP类扫描异常

    测试过程中确认,由于内部网络出口防火墙存在连接数等策略限制,会导致TCP类扫描出现异常,表现为大量误报. Nessus.nmap.synscan均存在此现象.

  3. 通过Cookie来记住用户名出现乱码问题(URL编码)

    在登录时,提交一个中文名的用户名到服务器并返回到客户端的Cookie中时, 这个过程会后台会报 java.lang.IllegalArgumentException (非法数据异常) -->在给 ...

  4. HDU 1811 Rank of Tetris 【拓扑排序 + 并查集】

    自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...

  5. vijos P1190繁忙的都市(Kruskal)(最小生成树)

    P1190  繁忙的都市 城市C是一个非常繁忙的大都市,城市 中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉 ...

  6. 选择快速源来加速linux系统更新

    sudo pacman-mirrors -c China -g 引用自manjaro百度贴吧

  7. 微软应用商店错误 0x00000194

    也可以下载安装包手动更新尝试解决. ------------------------------------------------------------------- 今天OTA升级了1809,应 ...

  8. python sql语句封装连接mysql

    进行了代码优化,欢迎评审 #!/usr/bin/python # -*- coding:utf-8 -*- import logging logging.basicConfig(level=loggi ...

  9. 深入理解Session和Cookie机制

    具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而 ...

  10. java中Frame Jpanel等中间显示

    几种是窗口中间显示的方法: 1.Frame int windowWidth = frame.getWidth(); //获得窗口宽 int windowHeight = frame.getHeight ...