.so库第一次见到是在搜索Android保存静态秘钥等特殊id字段做法时看到的-通过NDK的方式将静态秘钥保存在so文件中, 关于原生开发工具包(NDK)详细见官网指南要更详细,这里我记录我度娘各种结果后的实现.

  在工具中添加自定义工具添加javah命令和dnk-build命令

  

  

这里name:自定义命令名

  Program:$JDKPath$/bin/javah  $JDKPath$JDK路径

  Parameters:-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$    生成的.h文件命令

  Working directory:$ModuleFileDir$/src/main/java  文件生成后存放的目录-这个会在项目一级目录的src/main/java 下生成一个jni文件夹 .h文件就存放在里面

下面添加ndk-build命令:

  

  命令工具添加后 我们先来生成JNIDemo类

  

public class JNIDemo {
public native void testHello();
public static void main(String[] args){
//加载C文件
System.loadLibrary("TestJNI");
JNIDemo jniDemo = new JNIDemo();
jniDemo.testHello();
}
}

   

  选中java文件右键 通过External Tools生成javah文件,成功后会在/src/main 下生成jni文件夹 .h文件

  如上图,.h文件生成后这个时候我们需要自己创建c/c++文件 JNIDemo.cpp  将.h中方法和属性粘贴复制过去

JNIDemo.h

JNIDemo.cpp

这里具体怎么写,其实本人也不知道哈哈哈~,可以搜下相关JNI教程

在 JNIDemo.java-JNIDemo.h-JNIDemo.cpp 文件都有了后 可以开始生成so库,生成so库的时候需要注意 JNIDemo.h、JNIDemo.cpp都需要在上面说的jni文件夹中

并且jni文件夹中还需要增加Android.mk、Application.mk 作为初学者开始连mk文件怎么创建都有些懵 不知道的可以瞧一眼右键New->File->Android.mk 就可以了

生成so库前,需要早gradle.properties:中添加

android.useDeprecateNdk=true

Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)       LOCAL_MODULE := TestJNI
LOCAL_C_INCLUDES := JNIDemo.h
LOCAL_SRC_FILES := JNIDemo.cpp include $(BUILD_SHARED_LIBRARY)

上面必须保证语法还有文件名 引用的模块正确  不然会出错

LOCAL_PATH:源文件路径,宏my-dir由Build System提供,返回包含Android.mk的目录路径
每个Android.mk文件必须以定义LOCAL_PATH为开始,用于开发tree中查找源文件
include $(CLEAR_VARS): 可以参考官方指南~ ~ ~ ~
LOCAL_MODULE:要载入的模块库,与System.loadLibrary("TestJNI")中的参数保持一致
LOCAL_SRC_FILES:要编译的源文件
LOCAL_C_INCLUDES: 要引用的文件

Application.mk:
  
APP_PLATFORM := android-14
APP_PLATFORM 最低支持版本 这个需要与App的minSdkVersion相对应

到这里基本上没问题了,我们可以选中JNIDemo.cpp文件右键External Tools dnk-build生成库,如果成功的话会生成libs、obj文件夹

到这里生成.so库 大概就是这样,后面还有很多坑,继续入坑~ ~ ~ 
 

  

  

Andorid 生成NDK动态链接库 .so库的更多相关文章

  1. Android NDK生成及连接静态库与动态库

    对于Android应用开发,大部分情况下我们使用Java就能完整地实现一个应用.但是在某些情况下,我们需要借助C/C++来写JNI本地代码.比如,在使用跨平台的第三方库的时候:为了提升密集计算性能的时 ...

  2. 用NDK生成cURL和OpenSSL库

    最近在用Qt开发Android应用时需要获取https页面内容,但Qt内置的QNetworkAccessManager类只支持下面这些协议(调用其supportedSchemes成员函数获取): (& ...

  3. 【开发必备】今天我们来谈谈Android NDK动态链接库(so文件)的一些见解

    一.写在前面 直到现在,基本我写的每一个项目都会用到NDK动态链接库的知识,可见这个也的确十分常用.那么,今天,咱们就来谈谈它. 二.什么是ABI和so 1.发展 早起的Android系统几乎只支持A ...

  4. Qt调用VC++生成的动态链接库

    Qt如何调用VC++生成的动态链接库?假设当前有VC++编译器生成的动态库文件testdll.h,testdll.lib和testdll.dll. testdll.h文件源码如下: #ifdef TE ...

  5. Qt不同版本编译器,调用VC++生成的动态链接库

    今天用QT编译生成的共享库自己却怎么都不能调用,查了N久后找到这个帖子,发现搞定了,记录一下 http://qiusuoge.com/12720.html Qt如何调用VC++生成的动态链接库?假设当 ...

  6. 生成lua的静态库.动态库.lua.exe和luac.exe

    前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...

  7. 用NDK调用第三方库

    用NDK调用第三方库遇到不少坑,总结一下. 1.添加JNI目录 参考: http://www.cnblogs.com/lanqie/p/7442668.html 2.文件介绍: 其中:JniFacto ...

  8. 跨平台开发 -- C# 使用 C/C++ 生成的动态链接库

    操作环境:Visual Studio 2017 如何实现 使用 C# 进行嵌入式开发? .NET Core 虽然实现了跨平台,但是不可能处处使用 C# 开发,就好像没人使用SQL开发安卓APP,每种语 ...

  9. VS2013 生成sqlite3动态连接库及sqlite3.dll的调用

    一,生成sqlite3动态连接库1,去sqlite官网上下载最近的sqlite源码包,解压后得到四个文件:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h此处还需要sq ...

随机推荐

  1. 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度

    我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...

  2. tsung基准测试方法、理解tsung.xml配置文件、tsung统计报告简介

    网上搜集的资料,资料来源于:http://blog.sina.com.cn/ishouke 1.tsung基准测试方法 https://pan.baidu.com/s/1Ne3FYo8XyelnJy8 ...

  3. Python + selenium之组织unittest单元测试用例

    当增加被测功能和相应的测试用例之后unittest单元测试框架如何扩展和组织新增的测试用例的. # coding =utf-8 # calculator class Count (): def __i ...

  4. linux下杀毒工具clamav

    ClamAV 杀毒是Linux平台最受欢迎的杀毒软件,ClamAV属于免费开源产品,支持多种平台,如:Linux/Unix.MAC OS X.Windows.OpenVMS.ClamAV是基于病毒扫描 ...

  5. Beta版本发布

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/?page=2 这个作业要求在哪里 <作业要求的 ...

  6. cityspace

    类别的网址:https://blog.csdn.net/u010069760/article/details/77847595 r,g,b:  250 170 160 parking   244 35 ...

  7. 2017乌鲁木齐网络赛 j 题

    题目连接 : https://nanti.jisuanke.com/t/A1256 Life is a journey, and the road we travel has twists and t ...

  8. TFS2018 找不到JRE 错误

    配置TFS 2018 server configurion 报错 : Search requires Oracle Server JRE 7 Update 55 or higher or JRE 8 ...

  9. Tomcat:使用startup.bat启动tomcat遇到报错

    问题:使用startup.bat启动tomcat的时候报错,按照网页上的办法都试了一遍,但是没有解决问题.命令窗口启动tomcat会一闪而过,然后退出. 解决:1 检查环境变量配置是否有问题: CAT ...

  10. 【模板】无旋Treap(FHQ)

    如题,这是一个模板... #include <algorithm> #include <iostream> #include <cstring> #include ...