Android 项目调用第三方库so动态库

这篇具有很好参考价值的文章主要介绍了Android 项目调用第三方库so动态库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Android NDK开发中,可以通过自己编写C/C++代码来构建so动态库进行调用之外,还可以把so动态库提供给第三方使用;接下来,我将介绍在新创建的Android 项目(或已存在的Android 项目)中如何调用第三方so动态库。

关于如何进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库,请查看Android Studio 进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库_ErwinNakajima的博客-CSDN博客

注意:编译生成so动态库的Android 项目的包名要与新创建的Android 项目(或已存在的Android项目)的包名保持一致,不然会调用失败。

1.首先使用Android Studio(使用Android Studio 4.2.2之后的稳定版本)创建一个Android 项目(或打开已存在的Android 项目),项目包名要与编译生成so动态库的Android 项目包名保持一致,需要在app下的build.gradle文件中的android下添加

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
然后在android下的defaultConfig下添加
ndk {
            //选择要添加的对应 cpu 类型的 .so 库。
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
//            abiFilters 'armeabi-v7a', 'arm64-v8a'
            // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }

最后把第三方so文件复制到libs目录下(如下图一),我这里有三种so文件,分别是armeabi、armeabi-v7a、arm64-v8a(具体根据提供方来,一般有armeabi-v7a、arm64-v8a这两种就可以了)。

安卓引入so库,android,android studio

2.Android Studio 配置NDK(使用Android Studio 4.2.2之后的稳定版本)

(1) 步骤一:点击红圈处(这是Mac配置流程,Windows对应的按钮是Settings)

安卓引入so库,android,android studio

(2)步骤二:下载下图一中第3步红圈中的一个NDK和一个CMake,下载成功后如下图一所示(建议下载前先配置Android Studio 国内镜像代理,详见:Android Studio 国内镜像代理设置(如果设置之后还是远程仓库下载失败,请仔细阅读其内容就可以解决了)_android studio 镜像_ErwinNakajima的博客-CSDN博客)。
安卓引入so库,android,android studio

3.在项目中的创建JavaGetData文件,文件内容

package com.phone.library_common;

import android.content.Context;

public class JavaGetData {
    static {
        System.loadLibrary("return-data");
        System.loadLibrary("native-lib");
    }

    public static native String nativeAesKey(Context context, boolean isRelease);

    public static native String nativeDatabaseEncryptKey(Context context, boolean isRelease);

    public static native String nativeGetString(Context context, boolean isRelease);


}

我这里把System.loadLibrary调用直接写在了JavaGetData类的代码块,就不用单独写一个static方法进行调用了。

注意:两个System.loadLibrary方法的参数不是libnative-lib.so和native-lib.so,而是

libnative-lib和native-lib(记得要把so文件名的.so去掉,然后再作为参数传入System.loadLibrary方法)。

4.在用到的地方进行调用native方法即可

val aesKey =
            JavaGetData.nativeAesKey(this@MainActivity, false)
        val databaseEncryptKey =
            JavaGetData.nativeDatabaseEncryptKey(this@MainActivity, false)
        val getString =
            JavaGetData.nativeGetString(this@MainActivity, false)
        LogManager.i(TAG, "aesKey*****$aesKey")
        LogManager.i(TAG, "databaseEncryptKey*****$databaseEncryptKey")
        LogManager.i(TAG, "getString*****$getString")

如对此有疑问,请联系qq1164688204。

推荐Android开源项目

项目功能介绍:原本是RxJava2 和Retrofit2 项目,现已更新使用Kotlin+RxJava2+Retrofit2+MVP架构+组件化和
Kotlin+Retrofit2+协程+MVVM架构+组件化, 添加自动管理token 功能,添加RxJava2 生命周期管理,集成极光推送、阿里云Oss对象存储和高德地图定位功能。

项目地址:https://gitee.com/urasaki/RxJava2AndRetrofit2文章来源地址https://www.toymoban.com/news/detail-586658.html

到了这里,关于Android 项目调用第三方库so动态库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt Creator导入第三方so库和jar包——Qt For Android

    之前了解了在Android Studio下导入so库和jar包,现在实现如何在Qt上导入so库和jar包。 下面是我安卓开发(需调用安卓接口的代码)的目录(图1),此目录结构和原生态环境(Android Studio)下开发的结构很相似: 图1 在Qt  Creator上导入so库和jar包,比在Android Studio上简单很多,只需

    2024年04月29日
    浏览(27)
  • 第三方应用调用系统SO 库失败Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library

    在Android 31平台,尝试使用第三方应用调用系统SO 库,会报如下的错误 Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library \\\" /system/lib64/XXX.so \\\" needed or dlopened by \\\"/apex/com.android.art/lib64/libnativeloader.so\\\" is not accessible for the namespace \\\"classloader-namespace\\\" 大体原因是,Android N 开始限制 第三方

    2024年02月12日
    浏览(54)
  • 编译一份适用于鸿蒙ArkTs的so动态库教学,提供给第三方导入并使用

    转载注明出处 这里以cJSON为例,只需要使用到仓库的cJSON.h和cJSON.c 打开DevEco-Studio创建一个native项目 选项随意填写 将cJSON.c和cJSON.h放到项目自动创建的cpp文件夹下 在cmakelists.txt添加两行 add_library(cjson SHARED cJSON.c) target_link_libraries(cjson PUBLIC libace_napi.z.so) cjson表示最终导出的so库的

    2024年01月19日
    浏览(33)
  • 安卓系统分区 AB . 动态分区 .VAB到底是何物,分区不同怎么刷写第三方rec

    安卓机型的分区架构发展基本启程为:onlyA,AB,onlyA动态分区,AB动态分区,到目前的VAB架构分区.其实这些对于一般的玩机友友来说影响不大。唯一需要关注的就是分区不同,刷写rec的方式略有不同。今天这个帖子带大家简单了解下安卓机型的分区架构和刷写twrp注意的事项

    2024年02月02日
    浏览(32)
  • Android 13.0 添加自定义服务,并生成jar给第三方app调用

    在13.0系统产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar 给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能 从而来实现所需要的功能 添加

    2024年02月05日
    浏览(52)
  • Android 14.0 添加自定义服务,并生成jar给第三方app调用

    在14.0系统ROM产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar 给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能 从而来实现所需要的功能 在

    2024年04月10日
    浏览(37)
  • 鸿蒙使用第三方SO库

    使用第三方SO库以导入OpenCV和MNN的SO库为例 1、将MNN和Opencv的so文件(包括.407文件),放入模块下libs目录对应的版本(arm64-v8a和armeabi-v7a) 2、配置模块目录下的build-profile.json5的buildOption字段,增加abiFilters字段: 3、在CMakeLists.txt所在目录,创建\\\"thirdPart”目录,然后将MNN和opencv的头文件

    2024年01月19日
    浏览(25)
  • Android将Uri转为路径字符串(适配安卓全版本)并使用第三方应用打开文件(适配Android7.0+)

    做这个功能时在网上找了无数篇例子,有些方法是有问题的,故自己写一篇完整实现的总结,作备忘也作案例。顺便说一句,Android对存储权限的给予真的越来越严格 目录 1.Uri转为路径String以获得文件名  2.获取文件后缀名 3.通过后缀名获取文件MIME类型  4.设置Intent的Uri与权限

    2024年02月19日
    浏览(29)
  • 7 款最佳第三方安卓 ROM

    虽然现在越来越多的安卓智能手机用户选择使用手机自带系统(比如 MIUI 、 EMUI 等),但第三方安卓  ROM 仍不可替代,尤其是对于已超出官方系统更新期限的设备。第三方 ROM 可以帮助用户延长设备的使用寿命,允许用户在性能过剩的旧款设备上体验最新的安卓系统体验,并

    2024年02月06日
    浏览(35)
  • 安卓玩机搞机-----没有第三方包 刷写第三方各种GSI系统 体验非官方系统

    很多安卓友友热衷与刷这些各种第三方包体验。但有个别机型第三方资源较少。而且有的机型要体验非官方系统却没有对应系统的第三方包。那可以体验下刷gsi系统来畅玩。今天的帖子就聊聊GSI系统的各种刷写操作和对应的故障解析、 💔💔💔💔💔💔💔💔💔什么是GSI 系

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包