GVKun编程网logo

Android Studio导入so文件到项目中的实例详解(android studio 导入so)

28

如果您想了解AndroidStudio导入so文件到项目中的实例详解和androidstudio导入so的知识,那么本篇文章将是您的不二之选。我们将深入剖析AndroidStudio导入so文件到项目

如果您想了解Android Studio导入so文件到项目中的实例详解android studio 导入so的知识,那么本篇文章将是您的不二之选。我们将深入剖析Android Studio导入so文件到项目中的实例详解的各个方面,并为您解答android studio 导入so的疑在这篇文章中,我们将为您介绍Android Studio导入so文件到项目中的实例详解的相关知识,同时也会详细的解释android studio 导入so的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

Android Studio导入so文件到项目中的实例详解(android studio 导入so)

Android Studio导入so文件到项目中的实例详解(android studio 导入so)

1、采用最简单直接的方式导入s0文件:在app下新建jniLibs/armeabi目录指定so文件拷贝到这一目录。

2、一般来说其他第三方的开放平台的so文件都是已经把对应的本地Java接口类一起封装到so或者其他库文件里了,我们不需要自己去定义自己的本地接口类,假如说第三方只是提供了so文件,那么就需要我们去定义jni接口类这个类并不能是随意的,必须是和so文件里定义的方法名的一一对应,即包名和类名必须一致,否则会发生编译通过加载的时候就出错。在本次导入so文件时,未能找到对应java类,故需自行定义

         2.1、首先利用nu -D xxx.so查看so文件中java类与函数的定义方式:

         

        2.2、按照对应包的路径,在java目录下新建SoundAuthentication类(com.aw.soundAuthentication)。

        

        2.3、在新建类中加载指定so包与对应函数(函数声明时需要按照so提供者声明的函数的定义,故若不知时,最好先咨询so文件提供者函数的定义方式是啥,否则无法生效)。

        

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

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

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的资料请关注其它相关文章!

您可能感兴趣的文章:
  • Android studio 下JNI编程实例并生成so库的实现代码
  • Android Studio中导入JNI生成的.so库的实现方法
  • 浅谈Android Studio JNI生成so库
  • 从源码编译Android系统的Java类库和JNI动态库的方法
  • android 调用JNI SO动态库的方法

android studio so文件导入

android studio so文件导入

首先我们把   armeabi/*.so等so文件放到libs文件夹。

 

然后我们在module的build.gradle的android{里面加上

    sourceSets {
        main {
            jniLibs.srcDirs = [''libs'']
        }
    }

 最后我们点击gradle同步,so文件就成功导入了。

Android studio 使用心得(六)---android studio 如何加载.so文件

Android studio 使用心得(六)---android studio 如何加载.so文件

    之前一直没怎么注意,以为.so文件android为像eclipse一样直接加载,但是直到昨天我在android studio上调试公司项目推送消息的时候,才发现,.so文件原来没有加载成功.

  可能之前  Android studio 使用心得(三)---从Eclipse迁移到Android 这篇文章我是用Demo4来做例子,里面并没有引用.so文件,所以大家按照这篇文章去迁移项目的时候,会遇到问题。昨天我网上找了一下关于android studio gradle 加载.so文件的文章,发现大多还停留在gradle 低版本的时候的解决方法,看上去都好复杂,现在android studio1.0以后解决这个问题就很简单啦!如果大家还在用1.0以前的版本那我就要喷你一脸啦。。

     我先提一点,就是如果从android studio上直接创建一个项目和从eclipse迁移过来的项目其实目录结构会稍微有区别的。

 1.  我先讲一下,怎么解决从eclipse迁移过来的代码加载.so文件.直接以我的项目为例。

  先看一下目录结构

  

  大家会注意到,我们从eclipse迁移过来的项目,会默认给我们创建一个文件夹jniLibs,然后把eclipse里面libs文件夹里的内容都复制过来,如果直接在android studio 里面创建项目是不会有这个文件夹的,这是区别一。从eclipse迁移过来的项目上,会在build.gradle配置文件里面加上一段配置

 sourceSets {
        main {
            manifest.srcFile ''AndroidManifest.xml''
            java.srcDirs = [''src'']
            resources.srcDirs = [''src'']
            aidl.srcDirs = [''src'']
            renderscript.srcDirs = [''src'']
            res.srcDirs = [''res'']
            assets.srcDirs = [''assets'']
            jniLibs.srcDirs = [''libs'']//这一行是没有的,如果我们有.so文件就需要加上这一行代码
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot(''tests'')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot(''build-types/debug'')
        release.setRoot(''build-types/release'')
    }

再看一下图。之前我一直认为  compile fileTree(dir: ''libs'', include: ''*.jar'')这样就会全部加载.jar和.so文件,其实我错了,如果没有在sourceSets main里面加上一句 jniLibs.srcDirs = [''libs''],是不会加载.so文件的。

 

2.如果我们创建项目就是在android studio上创建的

 

默认没有jniLibs文件夹。所以需要我们自己创建。目录  src--->main--->jniLibs

以加载加载信鸽sdk为例子

 我们先把.so文件全部复制到jniLibs文件。目录不变,

 

 

最后添加成功

然后,再说一下添加.jar包。跟eclipse一样,先把.jar文件放到libs目录下,然后add asLibrary.就可以了。

 

运行项目,就Ok了。这时也不需要再去配置

   jniLibs.srcDirs = [''libs'']

 

 

 

 

 

 

 

 

 

 

Android Studio 加载.so文件

Android Studio 加载.so文件

  1. 项目从eclipse 中导出,本来.so文件都放在libs/armeabi目录下

  2. 导入到Android Studio 工具下,要将.so文件。另存入到app/jniLibs/armeabi目录下,刚导入的项目中没有这几个目录,需要自己去创建。

  3. 这个是他工具默认的加载目录,当然也可以通过gradle的配置来完成,这块我就不讲了。自己自行谷歌(百度)下吧

今天关于Android Studio导入so文件到项目中的实例详解android studio 导入so的分享就到这里,希望大家有所收获,若想了解更多关于Android Studio 3.5版本JNI生成SO文件详解、android studio so文件导入、Android studio 使用心得(六)---android studio 如何加载.so文件、Android Studio 加载.so文件等相关知识,可以在本站进行查询。

本文标签: