Android Studio 3.5版本JNI生成SO文件详解

学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择。

废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤

1、创建需要调用的Java类

在你某个指定的包下创建如下类

package com.journey.org;

public class JniHello{
    static {
        System.loadLibrary("JniHello")
    }

    public static native String welcomeJniStudy();
}

2、创建通用工具

首先选择File->Settings->Tools->External Tools 具体如下图

2.1、创建javah工具

其具体设置如下

Program:$JDKPath$\bin\javah.exe
Arguments:-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$
Working directory:$ModuleFileDir$\src\main\java

2.2、创建ndk-build工具

其具体设置如下

Program:D:\workpalce\AndroidSDK\ndk-bundle\build\ndk-build.cmd // 安装ndk的路径
Arguments:
Working directory:$ModuleFileDir$\src\main

3、通过通用工具javah生成C代码

其步骤如下

就会在jni文件夹下生成相应的c文件

4、创建Android.mk和Application.mk

在生成的c文件下创建上述两个文件

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS += -llog
LOCAL_LDLIBS +=-lm
LOCAL_MODULE := JniHello
LOCAL_SRC_FILES =: JniHello.cpp  # 实现c代码文件的名字
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_MODULES := JniHello
APP_ABI := all

5、 实现c中的方法

步骤如下:

具体代码如下:

#include "com_journey_org_JniHello.h"

JNIEXPORT jstring JNICALL Java_com_journey_org_JniHello_welcomeJniStudy(JNIEnv *env, jclass jclass){
    return env->NewStringUTF("welcome to study jni")
}

6、配置文件

需要在module下的build.gradle中配置ndk相关内容,具体如下

ndk{
        moduleName "JniHello"
        //abiFilters \"armeabi-v7a", "x86" //输出指定abi下的so库
    }
sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDir "src/main/libs"
    }

7、生成so文件

按如下步骤选择

就会在libs文件夹下生成相应的so文件

8、测试调用

以上就是Android Studio 3.5版本JNI生成SO文件详解的详细内容,更多关于JNI生成SO的资料请关注我们其它相关文章!

(0)

相关推荐

  • 完美解决安卓jni项目会删除其他so文件的问题

    安卓项目开发中,项目中使用到jni开发,使用C/C++编写了自己的so库,调试和运行一切正常,Android.mk文件代码如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:=observer LOCAL_SRC_FILES:=observer.c LOCAL_C_INCLUDES:= $(LOCAL_PATH)/include LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog

  • Android Studio中导入JNI生成的.so库的实现方法

    Android Studio中导入JNI生成的.so库的实现方法 由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个.so库文件之后,eclipse工具就会自动把这些库导入到apk中.而Android Studio目前为止(0.86版本)还无法做到那么自动,但是我们可以通过以下方式进行. 首先在Android Studio工程的app目录下创建整个jni目录,jni目录里写Android.mk.Application.mk以及各类C/C++和汇编源文件.然后跟原来

  • Android studio 下JNI编程实例并生成so库的实现代码

    最近需要使用JNI编程,学了下JNI,并且在Android Studio下实现了一个小demo.这期间有一些坑,还好都解决了,想分享出来,希望大家少走弯路.本文中采用的平台是Windows,NDK环境已经搭建好,这方面资料很多,大家可以自行百度. 本文分为两个部分: 1.如何通过编写Jni实现native方法的调用. 2.怎样生成.so动态库提供给第三方使用. 以下是正文: 一,编写jni文件,实现本地方法 1,建立一个新工程,只有一个MainActivity,里面加载库文件并且调用若干本地方法

  • 浅谈Android Studio JNI生成so库

    1.新建Android studio工程 2.新建class:AppKey.java.主要为了保存密钥 代码块 package com...adminapp.lib.utils.jni; /** * Created by seven on 16/9/8. */ public class AppKey { static { System.loadLibrary("AppKey"); } public static native String WechatId(); public stat

  • 解决NDK开发中Eclipse报错Unresolved inclusion jni.h的最终解决方法(已测)

    在做NDK开发过程中有时候在eclipse里会遇到其无法处理inclusion导致symbol显示错误,网上有许多方法可以解决类似"Unresolved inclusion jni.h" 错误的方法,包括include path等方法,不过对我都不管用. 最终的解决办法就是初始化eclipse对该project的native support: 1. 在eclipse中关闭指定Project 2. 用其他编辑工具打开该project的.project文件,删除以下内容: ...... &

  • Android Studio 3.5版本JNI生成SO文件详解

    学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类 package com.journey.org; public class JniHello{ static { System.loadLibrary("JniHello") } public static native String welcomeJniStudy(); } 2.创建通用工

  • Android Studio打包.so库到apk中实例详解

    Android Studio打包.so库到apk中实例详解 由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个.so库文件之后,eclipse工具就会自动把这些库导入到apk中.而Android Studio目前为止(1.1.0版本)还无法做到那么自动,但是我们可以通过以下方式进行. 首先在Android Studio工程的app目录下创建整个jni目录,jni目录里写Android.mk.Application.mk以及各类C/C++和汇编源文件.然后跟原来一样

  • Android Studio 中运行 groovy 程序的方法图文详解

    Groovy简介 Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码.由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库. Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言.使用该种语言不必编写过多的代码,同时又具有闭包和动态语

  • Android Studio搜索功能(查找功能)及快捷键图文详解

    1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[find],开始在整个工程内查找该字符串 查找结果如下: 3.查找类[Ctrl+N] 4.查找文件[Ctrl+Shift+N] 5.查找项目中的方法或变量[Ctrl+Shift+Alt+N] 6.查找类/方法/变量引用的地方 先定位光标 右键选择"Find Usages"(快捷键Alt+F7)

  • Android Studio将程序打包成APK的步骤详解

    第一步:先点击Build选择GenerateSigned APK 第二步:如果之前有编译成APK的话,就直接选择Choose existing已经存在的key:如果没有编译成APK那就选择Create new创建一个新的key的存放路径,然后填上密码,其中First and Last Name填一下,其他的无所谓.如图 尽量保证图中所指的两处密码相同,这样可以避免混淆,然后点击ok.下图的红圈之内填的是存储key的文件名. 做完上述的操作,会返回下图,然后点击next 接下来,一定要点击下图标记

  • Android Studio 如何删除/新建一个module(图文教程详解)

    一.删除一个module PS:此方法也会将该module从你的硬盘中删除 如果直接右键会发现没有delete选项 1.选中想要删除的module,右键点击Open Module Settings选项 2.选中移除 3.点击yes 4.注意点击ok 5.小绿点消失说明操作成功啦 6.右键delete 二.新建一个module 1.file-new–new module 2.选择新建的moudle类型 3.编辑应用名称和module名称 4.可直接finish不做修改 附页 1.Android s

  • Android Studio 中aidl的自定义类的使用详解

    自己折腾了好久,记录一下. service端: 1:创建类Dog,需要实现Parcelable接口: 2:aidl下创建 Dog.aidl,里面两句话就可以了 (1)package s包名; (2)parcelable Dog; 3:interface.aidl引入Dog类, import s包名.Dog; Client 端: 1:创建类Dog,需要实现Parcelable接口: 2:aidl下创建 Dog.aidl, (1)package c包名; (2)parcelable Dog; 注意:

  • caffe的python接口生成solver文件详解学习

    目录 solver.prototxt的文件参数设置 生成solver文件 简便的方法 训练模型(training) solver.prototxt的文件参数设置 caffe在训练的时候,需要一些参数设置,我们一般将这些参数设置在一个叫solver.prototxt的文件里面,如下: base_lr: 0.001display: 782gamma: 0.1lr_policy: “step”max_iter: 78200momentum: 0.9snapshot: 7820snapshot_pref

  • Android Studio中ButterKnife插件的安装与使用详解

    1>Android Studio 安装ButterKnife插件 同安装其他插件类似,如下: 1.1>打开Plugins界面 按照上图中1,2,3指示操作(注意:这里我的Android Studio中已经安装了该插件,所以显示的内容不太一样).然后重启Android Studio. 2>在项目上使用该开源项目(以Android Studio 为例) 2.1>在bulid.gradle中添加依赖 重新编译一下该项目,通过后继续操作. 2.2>在代码中就可以使用注解的方式了 2.

  • android studio实现简单考试应用程序实例代码详解

    一.问题 1.如图所示,设计一个包含四种题型的简单考试应用程序(具体考试题目可以选用以下设计,也可以自己另外确定),项目名称:zuoye06_666 :(666,改成自己的实际编号). 2.布局管理器任选(约束布局相对容易实现). 3."提交"按钮的Text通过字符串资源赋值,不要直接输入"提交"两个字. 4.每题按25分计算,编写相应的程序,答题完成后单击"提交"按钮,在"总得分:"右边文本框中显示实际得分:同时,显示一个T

随机推荐