用NDK生成so给第三方用

参考了https://blog.csdn.net/zi413293813/article/details/50074239 然后自己重新整理补充

我用的ndk-r10d

ndk下载地址http://developer.android.com/sdk/ndk/index.html

eclipse 开发环境

1、用eclipse创建一个android项目

2、选中项目右键->Properties->Builders->New->选中Program 点击OK->各种配置文字太难描述直接上图

配置了ndk-build 的路径还有刚刚创建的那个android项目

打勾

Specify Resources 浏览找到刚刚创建的android项目就可以了,项目配置就这些

在src目录先创建一个class文件,内容如下

public class JniClient {
    static public native String AddStr(String strA, String strB);
    static public native int AddInt(int a, int b);
}

找到JniClient.java(刚刚创建的那个类)所在位置,右键打开cmd或者powershell 执行命令javac JniClient.java

在项进入到src磁盘目录右键打开cmd或者powershell 执行命令 javah com.example.mtest.JniClient (这个需要根据自己项目实际路径而定)

这样就生成了com_example_mtest_JniClient.h 头文件内容就不展示了,最前面连接地址里面有

然后手动创建一个com_example_mtest_JniClient.c 最前面连接地址里面有 ,编辑器有问题贴不出来

把这个头文件和源文件剪切到 jni 目录(项目根目录下 没有就自己创建)

在jni目录里面添加一个Android.m

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=_SRC_FILES := com_example_mtest_JniClient.c
include $(BUILD_SHARED_LIBRARY)

以及Application.mk

#使用STL库
APP_STL := gnustl_static
#兼容老的语法,使一些错误降为警告
APP_CPPFLAGS += -fpermissive
#选择平台,如果都需要生成用空格隔开
APP_ABI := armeabi armeabi-v7a 

刷新项目就会在lib目录生成对应的 so 文件

下面写一下如何使用刚刚生成的so库

重新新建一个android 项目 我这里用的是cocos2d-x的一个游戏项目

把生成的so放到新的android项目的jni目录下

在这个新项目Android.mk里面添加如下内容

include $(CLEAR_VARS)
LOCAL_MODULE := libTestNdk
LOCAL_SRC_FILES := TestNdk/$(TARGET_ARCH_ABI)/libTestNdk.so
include $(PREBUILT_SHARED_LIBRARY)

LOCAL_STATIC_LIBRARIES += libTestNdk

还不能直接使用,回到第一个创建的android项目 把JniClient.java这个文件打成一个jar包

我是在src目录下powershell里面执行jar -cvf mtest.jar com\example\mtest\JniClient.class

生成mtest.jar包 ,不过bin目录里面好像有自动生成

把这个jar包放入第二个项目lib里面,在appactivity里面添加如下代码

然后在onCreate()方法里面调用

在手机上运行项目可以看到如下输出

.748: I/System.out(5703): ...abelmou...HelloWorld from JNI !

说明调用成功,写得有点乱方便自己回顾

原文地址:https://www.cnblogs.com/abelmou/p/8992176.html

时间: 2024-11-03 14:28:47

用NDK生成so给第三方用的相关文章

Android NDK 生成多重cpu类型的so包

1.请参考我的博客 http://blog.csdn.net/changcsw/article/details/41491257 安装上 cygwin 环境 2.请参考我的博客 http://write.blog.csdn.net/postedit/8983907 完成基本的ndk 简单的生成仅支持 armeabi 的 so包 3.生成 支持多重cpu类型的 so包 在ndk 目录对应的目录下android-ndk-r9d\samples\hello-jni\jni 找到 Application

android NDK 生成so 文件流程-ecplice

1:生成jni目录 首先说一句网上,大部分博客这么写的:打开控制台,进入项目目录,运行javah -classpath bin/classes -d jni com.example.hellojni.MainAcitivity 我只想问一句,这些代码您亲自运行成功了吗?您这么写出来责任心何在? 这么写你会遇到这个错误. 实际上可以这么写: 1: javah -classpath src -d jni com.itg.jni.ImageBlur 或写入android.jar的路径直接执行 2:ja

【转】使用NDK生成native C/C++的可执行程序

原文网址:http://www.linuxidc.com/Linux/2011-08/40901.htm 众所周知, NDK可以生成lib,让java程序通过jni来调用,其实,NDK也可以生成C/C++的可执行程序.不过这个程序要被执行的话还有要求. 1.可执行文件的名字必须是lib*.so. 否则apk安装时不会安装上去,因为目前apk的安装只支持安装lib文件,即lib*.so文件,如果不是此文件格式的,安装时不会拷到lib目录里.也可以考虑把可执行文件放assets里,java程序运行后

用NDK生成cURL和OpenSSL库

最近在用Qt开发Android应用时需要获取https页面内容,但Qt内置的QNetworkAccessManager类只支持下面这些协议(调用其supportedSchemes成员函数获取): ("ftp", "file", "qrc", "http", "data") 而网上我找到的支持https的介绍是使用QSslConfiguration类,然后把OpenSSL的两个DLL(libeay32.dll

eclipse上ndk环境的搭建&&so文件的生成&&jni文件的调用

JNI是java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java代码.JNI 是本地编程接口,Java和C/C++互相通过的接口.Java通过C/C++使用本地的代码的一个关键性原因在于C/C++代码的高效性. NDK是一系列工具的集合 .它提供了一些列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java应用一起打包成apk.它集成了交叉编译器,并提供了相应的mk文件隔离CPU,平台,ABI等

android的JNI 、 NDK 学习!

转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C.C++ 和汇编语言)编写的应用程序和库进行交互操作. 1.从如何载入.so档案谈起 由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Mac

安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)

前言 以前也讲过NDK开发,但是开始是抱着好玩的感觉去开始的,然后呢会helloWord就觉得大大的满足,现在静下来想这NDK开发到底是干什么呢? NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高效些但是在java与C相互调用时平白又增大了开销(其实效率不见得有所提高),然后呢,基于安全性的考虑也是为了防止代码被反编译我们为了安全起见,使用C语言来编写这些重要的部分来增大系统的安全性,最后呢生成so库便于给人提供方便. 好了,我们来看一下qq的结构,我们就

NDK官方开发指南翻译之 NDK_GDB

这几天看JNI,没有基础,那真是难受--把看到的相关资料记录一下,也分享给初学者. 'ndk-gdb' Overview 重要:如果你要调试线程相关的程序,请阅读下面的'Thread Support'部分. 1.用法: ------------- Android r4引入了一个叫着'ndk-gdb'的脚本,能够非常简单的为NDK生成的机器码启动一个debugsession. 这个脚本位于NDK的顶层目录下,它必须从你应用程序的目录或者子目录下,用命令行的方式来调用.例如: cd $PROJECT

NDK开发环境配置-AndroidStudio

参考文章http://ph0b.com/android-studio-gradle-and-ndk-integration/ 看了上面的文章之后对于AndroidStudio集成NDK生成的so动态库有了很简单的解决方案,其他的东西暂时没有很难的东西. 因此我们首先就需要生成so文件,按照hello-jni示例项目中的Android.mk和Application.mk Makefile配置文件来构建即可,使用根据javah自动生成的.h文件创建.c文件,所有文件都在jni目录下: 各个文件的内容