用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 !
说明调用成功,写得有点乱方便自己回顾
用NDK生成so给第三方用的更多相关文章
- Linux Ubuntu下用Android NDK 生成独立交叉编译链
本文主要介绍使用Android NDK生成独立交叉编译链,然后使用独立交叉编译链编译Android程序 下载NDK 下载与自己操作系统相吻合的版本 下载地址 解压到安装目录(如~/myndk): ta ...
- Android NDK编程,引入第三方.so库
android自带的编译工具NDK进行编译时(非单纯的调用第三方.so而是进行ndk编程),armeabi以及armeabi-v7a文件夹下的第三方so文件将会被删除,只会产生编译后的so文件,其他的 ...
- 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...
- Android NDK生成及连接静态库与动态库
对于Android应用开发,大部分情况下我们使用Java就能完整地实现一个应用.但是在某些情况下,我们需要借助C/C++来写JNI本地代码.比如,在使用跨平台的第三方库的时候:为了提升密集计算性能的时 ...
- android NDK 生成so 文件流程-ecplice
1:生成jni目录 首先说一句网上,大部分博客这么写的:打开控制台,进入项目目录,运行javah -classpath bin/classes -d jni com.example.hellojni. ...
- 【转】使用NDK生成native C/C++的可执行程序
原文网址:http://www.linuxidc.com/Linux/2011-08/40901.htm 众所周知, NDK可以生成lib,让java程序通过jni来调用,其实,NDK也可以生成C/C ...
- iOS 静态库生成(引用第三方SDK、开源库、资源包)
一.静态库创建 打开Xcode, 选择File ----> New ---> Project 选择iOS ----> Framework & Library ---> ...
- Android NDK生成共享库和静态库
Date: 2014-03-14 Title: Compile Android Native Binary And Library Published: true Type: post Tags: A ...
- GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造
go build 和 go install 都需要使用源码来进行编译.但是有时候我们只有.a或者.so文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...
随机推荐
- 让浏览器识别HTML5规范中的新标签
IE8浏览器中还没有添加对HTML5新标签的支持,所以在IE8中无法直接展现HTML5新标签中的内容.庆幸的是IE8/IE7/IE6支持通过document.createElement方法产生的标签, ...
- Android onActivityResult和setResult
如果你想在Activity中得到新打开Activity关闭后返回的数据,你需要使用系统提供的startActivityForResult(Intent intent,int requestCode)方 ...
- 【日常记录】用 vs2015 编译 love2d 引擎时出现 依赖项目luajit编译失败的解决办法
如图片所示,提示是没有找到cmake命令.看来是需要camke软件支持的,由于当初安装CMake后我重装了系统,也没有把cmake的bin路径 解决办法一:重新安装CMake,并勾选上"ad ...
- Oracle EBS 表空间
-- DATA 这里仅提供查询锁和解锁.有时,锁是正常的,所以杀掉正锁着的进程有一定的风险性. 具体步骤如下: -- 1.0 查看 holder的进程 , 'Holder: ', 'Waiter: ' ...
- [UI] 精美UI界面欣赏[12]
精美UI界面欣赏[12]
- 用UIScrollView产生视差效果
用UIScrollView产生视差效果 效果: 高级效果: 源码: MoreInfoView.h + MoreInfoView.m // // MoreInfoView.h // YXCell / ...
- Linux学习之路-2017/12/25
三章 命令通配符 .PATH变量 支持多种文本的通配符 通配符 含义 * 匹配零个或多个字符 ? 匹配任意单个字符 [0-9] 匹配范围内的数字 [ ...
- 从0开始搭建Element项目
第一步:安装 Node.js/NPM 下载Node.js:https://nodejs.org/zh-cn/download/ 下载安装即可. 第二步:安装 vue-cli 打开 cmd 创建,在命令 ...
- super深究
super的入门使用: 在类的继承中,如果定义某个方法,该方法会覆盖父类的同名方法,但有时候我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可以通过使用super来实现.比如: cla ...
- linux查看主板型号及内存硬件信息,及硬盘测速
查看主板型号: sudo dmidecode |grep -A16 "System Information$" 内存槽及内存条: sudo dmidecode |grep -A ...