android

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 <iostream>
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' /*,'arm64-v8a'*/
            }
        }
        ndk{
            abiFilters "armeabi-v7a"/*,'arm64-v8a'*/
        }

切换在Project视图下build/intermediates/cmake可以看到项目包含的so
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值