下载后把压缩包解压出来,例如:D:\ndk,目录下的ndk-build.cmd就是用来编译的批处理命令。

这里以D:\ndk\samples\hello-jni为例,打开D:\ndk\samples\hello-jni\jni\hello-jni.c查看代码:

/** Copyright (C) 2009 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

*http://www.apache.org/licenses/LICENSE-2.0*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

**/

#include

#include

/*This is a trivial JNI example where we use a native method

* to return a new VM String. See the corresponding Java source

* file located at:

*

* apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java*/

jstring

Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,

jobject thiz )

{

return (*env)->NewStringUTF(env, "Hello from JNI !");

}

因为我们是拿这个c源码文件来使用,如果迁就Java_com_example_hellojni_HelloJni_stringFromJNI

函数名的话,在我们的android工程中java类的声明就要是:com/example/hellojni/HelloJni.java。

反之,如果我们的android工程已经创建好,并且包名是com.example.hellojni,stringFromJNI函数我们写在了MainActivity.java类里,

那么这里的c函数就要修改为:Java_com_example_hellojni_MainActivity_stringFromJNI,否则在寻找函数时会找不到。

然后执行命令:D:\ndk\ndk-build.cmd(如果设置过环境变量则直接使用ndk-build.cmd)来编译hello-jni,如果没有错误会输出:

Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver

Gdbsetup       : libs/armeabi/gdb.setup"Compile thumb : hello-jni <= hello-jni.cSharedLibrary  : libhello-jni.soInstall        : libhello-jni.so => libs/armeabi/libhello-jni.so

编译成功会在D:\ndk\samples\hello-jni\libs\armeabi目录下生成libhello-jni.so文件。

三、创建android应用程序并使用so文件

打开eclipse创建一个android应用程序HelloJni,默认的com.example.hellojni包下面有一个MainActivity.java,

在此包下添加一个HelloJni.java,

package com.example.hellojni;

public class HelloJni {

public native String stringFromJNI();

/*This is another native method declaration that is *not*

* implemented by 'hello-jni'. This is simply to show that

* you can declare as many native methods in your Java code

* as you want, their implementation is searched in the

* currently loaded native libraries only the first time

* you call them.

*

* Trying to call this function will result in a

* java.lang.UnsatisfiedLinkError exception !*/

}

MainActivity.java修改为:

package com.example.hellojni;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.widget.TextView;

import android.util.Log;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//setContentView(R.layout.activity_main);

HelloJni jni = new HelloJni();

TextView tv = new TextView(this);

String str = jni.stringFromJNI();

Log.d("HelloJni", str);

tv.setText(str);

setContentView(tv);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

//Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);

return true;

}

static {

System.loadLibrary("hello-jni");

}

}

把编译生成的libhello-jni.so文件复制到F:\eclipse_workspace\HelloJni\libs\armeabi目录下(armeabi如果不存在则手动创建之),然后编译运行,效果图如下:

参考资料:

java windows so文件_windows下编译使用NDK,调用SO文件 | 学步园相关推荐

  1. 如何在Windows中的命令提示符下删除特定目录中的文件/子文件夹

    本文翻译自:How to delete files/subfolders in a specific directory at the command prompt in Windows Say, t ...

  2. Linux下使用C语言查找一个文件夹下指定扩展名的所有文件

    最近在linux下要干点和c语言相关的任务,其中涉及使用C语言查找一个文件夹下指定扩展名的所有文件,我去开始在网上查找后粘贴后不能用,最后发现是windows下才能使用.最后找到了一篇不错的文章,ht ...

  3. 删除指定文件夹下的小于 4K的所用文件...

    删除指定文件夹下的小于 4K的所用文件... (记一次垃圾邮件的删除..) Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const T ...

  4. PowerShell遍历文件夹下的子文件夹和文件

    PowerShell遍历文件夹下的子文件夹和文件是一件很容易的事儿.Get-ChildItem这个cmdlet就有一个recurse参数是用于遍历文件夹的. PowerShell中,使用Get-Chi ...

  5. 解放文件夹下所有层级的特定格式文件,找出文件夹内所有的txt/FLAC/MP4/MP3等等等等,并复制到另一个文件夹中

    解放文件夹下所有层级的特定格式文件,找出文件夹内所有的txt/FLAC/MP4/MP3等等等等,并复制到另一个文件夹中 引言 代码 得意 天天学习,好好向上 引言 各位朋友们好!最近遇到一些想要方便办 ...

  6. java bat运行jar文件_windows下bat批量运行jar包

    1. 在cmd下,java -jar ***.jar 运行后窗口不能关,但如果有多个jar,则会有多个cmd的窗口,很难看 2. 在cmd下,javaw -jar ***.jar运行后窗口可以关,但如 ...

  7. 在 windows 7 和 MinGW 下编译 OpenOCD 过程

    先说一下我的软硬件环境: 硬件: 一块评估板  Atmel SAMD21 xplained pro 没有普通的 Jtag 口, 它提供了 EDBG USB 口, 支持 CMSIS-DAP, OpenO ...

  8. qt4.8添加mysql驱动_Windows下编译Qt4.8 MySQL数据库驱动

     编译MySQL驱动 在Linux下准备移植到Windows下发布使用,遇到的问题: MySQL链接问题,没有相应的驱动 按照官方助手的去编译的话太费时间,编译起码要好几个小时,而且最终效果是一样的 ...

  9. trinitycore MySQL模块_Windows下编译TrinityCore服务端

    第一步建立文件夹 在任意分区根目录建议一个文件夹,但是名称不要用中文,比如我在E盘建立文件夹Trinity. 然后在文件夹Trinity右键选择Git Bash Here 之后出现以下画面 之后输入下 ...

最新文章

  1. client-go使用实例
  2. [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
  3. SQL语句获取数据库名、所有表名、所有字段名及字段类型
  4. leetcode 167 Two Sum II - Input array is sorted
  5. Log4j 2使用教程二 【详解】
  6. rbac权限管理5张表_Laravel5实现RBAC权限管理
  7. 计算机winform参考文献写,毕业论文基于C#WinForm的语音通信系统设计.doc
  8. react native进一步学习(NavigatorIOS 学习)
  9. 红旗7.0 rc1 版编辑开始菜单
  10. Android GSON解析JSON数据
  11. java开发常用的linux命令,Java开发中最常用的Linux命令整理
  12. C语言编程练习,猜数字游戏实现
  13. 注册测绘师考试复习视频资料
  14. 互联网公司无线接入平台怎么样
  15. ZZULIOJ1076-1080Python解法
  16. [河内塔]汉诺塔实现
  17. 5.Wide Deep Learning for Recommender Systems论文详细解读和代码实现
  18. SIGGRAPH Asia 2022 | 港中文MMLab:Marker Correspondence估计框架和应用
  19. matlab智能体运动轨迹,智能车辆运动轨迹规划方法的研究
  20. 天津大学计算机课程设计挂,天津大学智能装置课程设计 电子时钟..doc

热门文章

  1. 前端学习(601):集成react插件
  2. spring mvc学习(52):json数据类型提交
  3. 第四十九期:大牛总结的MySQL锁优化,写得太好了!
  4. KEIL ARM 6.12 compiler 编译__ASM 错误的解决方法
  5. 移动端click延迟和tap事件
  6. 关于春招 秋招面试的一些经验
  7. linux 64位 寻址空间_Ubuntu 20.04(64位)如何配置gcc-3.4用于编译linux-0.11
  8. 信号量与令牌桶_限流的4种方式令牌桶实战
  9. 学习10:Python重要知识
  10. sql 查询结果自定义排序