栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

android

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android

linux下ndk生成so并在andorid调用
  • android学习
    • NDK环境搭建
    • 编写so
    • 在android项目中调用生成的so
      • 更改CMakeLists.txt
      • 新建调用类
      • 编写cpp代码
      • 调用和运行
    • 注意事项
      • jstring的转换
      • 缩减app体积

android学习

在Ubuntu18下搭建ndk环境并生成so,Android Studio新建android项目测试so调用是否正常。
源码及使用文件 link.

NDK环境搭建

NDK官网下载链接: link.
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 这次下载的版本是r21e ;
  2. 传送到服务器或者虚拟机上,/usr/local下新建目录ndk;
  3. 解压文件;
sudo unzip android-ndk-r21e-linux-x86_64.zip 


5. 配置系统环境;

sudo vim /etc/profile

文件尾添加

export NDKROOT=/usr/local/ndk/android-ndk-r21e
export PATH=$NDKROOT:$PATH


:wq!保存退出更新环境配置

source /etc/profile

查看ndk配置是否成功

ndk-build

编写so
  1. 新建jni文件夹,新建Android.mk和Application.mk以及测试代码文件;

  2. 执行ndk-build成功后在jni同目录下生成libs里的so;

    test.cpp

// test.cpp
#include "test.h"

void fun1(){
	printf("测试jni");
}
int fun2(int a, int b){
    return a+b;
}

test.h

// test.h
#include 
void fun1();
int fun2(int a, int b);

Android.mk

LOCAL_PATH:=$(call my-dir)
APP_PLATFORM=android-16
include $(CLEAR_VARS)
LOCAL_MODULE:=test
LOCAL_SRC_FILES:=test.cpp test.h
LOCAL_LDLIBS :=  -lz -llog -L$(SYSROOT)/usr/lib  
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_MODULES = libtest
//APP_ABI    := armeabi armeabi-v7a arm64-v8a x86 x86_64
APP_ABI    := armeabi-v7a arm64-v8a
在android项目中调用生成的so
  1. 在项目右键新建c++模块


    2.在main目录下新建jniLibs文件,把生成的so文件放在这个文件夹,并更改app的build.grade
 sourceSets {
        main {
            jniLibs.srcDirs = ['jniLibs']
        }
    }

更改CMakeLists.txt 新建调用类

新建Tool类,在静态块static{}中加载so,通过选中函数然后快捷键Alt + Enter在cpp文件中生成链接函数

编写cpp代码

调用和运行


注意事项 jstring的转换
extern "C"
JNIEXPORT void JNICALL
Java_com_claire_jni_Tool_testString(JNIEnv *env, jclass clazz, jstring str) {
    const char *input_cstr = env->GetStringUTFChars(str, NULL);
    LOGI("传入字符串%s",input_cstr);
    //使用完释放
    env->ReleaseStringUTFChars(str, input_cstr);
}

缩减app体积

指定调用的架构

 externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti -fexceptions"
                abiFilters 'armeabi-v7a' 
            }
        }
        ndk{
            abiFilters "armeabi-v7a"
        }

切换在Project视图下build/intermediates/cmake可以看到项目包含的so

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029539.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号