Android so库开发——Android Studio生成so库(一)

这篇具有很好参考价值的文章主要介绍了Android so库开发——Android Studio生成so库(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android so库开发——Android Studio生成so库(一)

一、创建Native项目

1、新建 Native 项目

1)新建项目

Android so库开发——Android Studio生成so库(一)

         选择最下面的 Native C++ 下一步即可

2)填写项目信息

Android so库开发——Android Studio生成so库(一)

 3)选择C++版本可以直接选择默认

Android so库开发——Android Studio生成so库(一)

2、下载并配置NDK及CMake

1)进入Studio 设置 SDK 设置界面

Android so库开发——Android Studio生成so库(一)

        这里选择需要的 NDK 和 CMake 版本进行下载。

2)加载 ndk

        通过 File -> Project Structure 或 点击Android so库开发——Android Studio生成so库(一)图标进入设置界面。

Android so库开发——Android Studio生成so库(一)

         选择对应 ndk 版本。也可以在local.properties中直接添加 ndk 路径。

## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Fri Jan 06 14:13:10 CST 2023
sdk.dir=/home/chen-xu-neu/Android/Sdk
ndk.dir=/home/chen-xu-neu/Android/Sdk/ndk/21.0.6113669

3、Native 项目结构

1)代码结构

Android so库开发——Android Studio生成so库(一)

         主要就是再 main 下增加了 cpp 文件夹以及下面的文件,这部分代码主要用来生成 so 库中代码。

2)build.gradle(app)

android {
    defaultConfig {
        // 对应创建项目时选择的 C++ 版本
        externalNativeBuild {
            cmake {
                cppFlags ''
                // 生成so库类型
                abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
            }
        }
    }
    // CMakeLists.txt 文件路径
    externalNativeBuild {
        cmake {
            path file('src/main/cpp/CMakeLists.txt')
            version '3.10.2'
        }
    }
}

3)CMakeLists.txt

# cmke版本
cmake_minimum_required(VERSION 3.10.2)

# 项目名称
project("nativetestdemo")

# 生成so库配置
add_library( # 设置库名称
        native_xiaoxu
        # 将库设置为共享库
        SHARED
        # 引入代码文件
        native-lib.cpp)

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # 指定目标库
        native_xiaoxu

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

4)native-lib.cpp

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_wm_auto_nativetestdemo_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello XiaoXu";
    return env->NewStringUTF(hello.c_str());
}

        标准Native写法:Java_包名_类名_方法名

5)MainActivity

public class MainActivity extends AppCompatActivity {

    // 加载so库,与上面生成的库名对应
    static {
        System.loadLibrary("native_xiaoxu");
    }

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // Example of a call to a native method
        TextView tv = binding.sampleText;
        tv.setText(stringFromJNI());
    }

    /**
     * 添加 native 方法
     */
    public native String stringFromJNI();
}

        这样整个项目就完成了,运行项目会输出“Hello XiaoXu”,在build/intermediates/cmake/debug/obj/下就会生成对应的so库。这样最原始的so库就生成完了。

4、代码优化

so库代码优化

        在模块化开发及业务逻辑比较复杂时,将代码都写在 native-lib.cpp 中显然是不合理的,这就需要将代码抽取出来。

1)创建 .cpp 和 .h 文件

Android so库开发——Android Studio生成so库(一)

2)NativeImpl.h

#ifndef MYNATIVE_CLIENTIMPL_H
#define MYNATIVE_CLIENTIMPL_H

#include <vector>

class NativeImpl {
    public:
    NativeImpl();
    virtual ~NativeImpl();

    virtual char* getUserName();
};


#endif //MYNATIVE_CLIENTIMPL_H

3)NativeImpl.cpp

#include "NativeImpl.h"


NativeImpl::NativeImpl(){

}

NativeImpl::~NativeImpl(){

}

char* NativeImpl::getUserName(){
    // 这里处理代码逻辑
    return "XiaoXu";
}

4)CMakeLists.txt 增加 cpp 文件引入

add_library( # Sets the name of the library.
        native_xiaoxu

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        native-lib.cpp
        src/NativeImpl.cpp)

5)native-lib.cpp 增加对应方法

#include <jni.h>
#include <string>
#include "src/NativeImpl.h"

/* 获取NativeImpl */
NativeImpl nativeImpl;
NativeImpl* getNativeImpl(){
    return &nativeImpl;
}

/* 将Activity方法提取到NativeImpl中 */
extern "C" JNIEXPORT jstring JNICALL
Java_com_wm_auto_nativetestdemo_NativeImpl_getUserName(
        JNIEnv* env,
        jclass clazz) {
    char* c = getNativeImpl()->getUserName();
    return env->NewStringUTF(c);
}

so库使用优化

1)将Activity方法提取到NativeImpl中

public class NativeImpl {
    // 加载so库
    static {
        System.loadLibrary("native_xiaoxu");
    }

    /**
     * 添加 native 方法
     */
    public static native String getUserName();
}

2)Activity中使用

NativeImpl.getUserName()

项目源码文章来源地址https://www.toymoban.com/news/detail-485754.html

到了这里,关于Android so库开发——Android Studio生成so库(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 利用android studio 生成 JNI需要的动态库so文件 图文详解

    到官网下载,此处不再陈述 JNI 是JDK里的内容,电脑上正确安装并配置JDK即可。 直接在Android studio下载(File----Settings) 工具一: AndroidStudio下载安装cmake(调试Native时会使用到LLDB,请一同勾选下载安装) 工具二: 用NDK的脚本工具使用ndk-build 新建项目,选择Native C++,如下图所

    2024年02月09日
    浏览(68)
  • android studio 新建项目没有R文件

    android studio 新建项目没有R文件,处理步骤 1,找一个能打开的项目替换根目录下的settings.gradle 2,改app 目录下的build.gradle文件 3,改gradle版本 4,改AndroidManifest.xml 5,改theme 改为,ok.

    2024年02月16日
    浏览(31)
  • Android Studio新建项目直接运行报错

    build.gradle 的版本 报错信息 解决办法 打开步骤:菜单栏 File → Project Structure → Modules 保存后运行成功!

    2024年02月07日
    浏览(31)
  • Android Studio新建项目缓慢解决方案

    新建Android Studio项目时,常会因为网络问题导致部分依赖下载缓慢,其中gradle和kotlin最拖慢进度。 只需要更改gradle-wrapper.properties文件的distributionUrl属性即可,如下图: 其中distributionUrl属性改为国内源,可从腾讯云这里寻找相应版本的资源链接。 其中需注意一点,资源需要下

    2024年02月06日
    浏览(38)
  • Android studio 新建的项目中xml不提示了

    新安装的as或者新建的项目中,打开xml编辑,突然发现没有代码提示了,有的朋友就认为as出问题了,或者新建项目不对,gradle等问题,其实这个问题就是您的版本complieSdkVersion和buildToolsVerison版本不一致导致的,把版本调整一下重新编译即可。     另外如果您版本一致,还是

    2024年02月08日
    浏览(44)
  • Android Studio新建项目下载依赖慢,只需一个操作解决

    新建的安卓工程,下载依赖贼慢怎么办?水一篇吧。 首先新建工程,建好以后项目就自动开始下载了,底部开始出现进度条,但是进度条一直不怎么动,网速也就十几k,要是等他下载得下一天。 直入主题, 1、新建项目:输入名字选择位置这都是自己定的,选择安卓版本也

    2024年02月21日
    浏览(41)
  • APP安卓开发之Android Studio从安装到创建项目(一键解决gradle下载缓慢以及写代码没提示问题,包含如何创建手机模拟器)教程

    选择NEXT 选择NEXT 选择要安装的地址,然后选择NEXT 选择Install 先启动刚安装好的Android Studio 选择Do not import settings,然后选择OK 选择Cancel 先选择D\\\'ont send,然后选择NEXT 这里选择Custom,然后NEXT 选择Android Studio自带JDK的安装位置,然后NEXT 选择一个自己喜欢的主题颜色,然后NEXT 选

    2024年04月29日
    浏览(55)
  • 新版Android Studio火烈鸟 在新建项目工程时 无法选java的语言模板解决方法

    最近下载最新版androidstudio时 发现不能勾选java语言模板了 如果快速点击下一步 新建项目 默认是kotlin语言模板 这可能和google主推kt语言有关 如图所示 如果勾选 No Activity 这个模板 是可以选java语言模板的 但是里面没有默认的Activity 和以前的用法一样 可以勾选java语言模板 也有

    2024年02月11日
    浏览(38)
  • OpenCV开发之——人脸识别库生成so文件(1),通宵都要看完这个Android关键技术点

    ifneq (“”,“$(wildcard $(OPENCV_ANDROID_SDK)/OpenCV.mk)”) include ${OPENCV_ANDROID_SDK}/OpenCV.mk else include ${OPENCV_ANDROID_SDK}/sdk/native/jni/OpenCV.mk endif else include …/…/sdk/native/jni/OpenCV.mk endif LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp LOCAL_C_INCLUDES += $(LOCAL_PATH) LOCAL_LDLIBS += -llog -ldl LOCAL_MODULE := detection_b

    2024年04月16日
    浏览(79)
  • Android Studio心得-创建登录注册项目

            首先先了解AndroidStudio是什么:Android Studio是一个由谷歌开发的Android应用程序开发环境,用于开发Android应用程序。它基于JetBrains IntelliJIDEA软件,并包含了许多定制化功能,包括易于使用的分析工具、内存分析工具和代码编辑器等,支持Java、Kotlin等多种编程语言。An

    2024年02月05日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包