音视频基础——交叉编译(Hello-JNI)

音视频编解码相关知识

既然音视频一定会用到c/c++库,所以也就会使用jni

开发工具

  • AndroidSudio3.1.1
  • SDK Tool(CMake、LLDB、NDK)

操作步骤

  • 1.创建一个新项目
  • 2.在新项目中创建一个native方法的类
public class JniHelper {
    public static native String getStringTemp();
}
  • 3.将2中的java文件生产.h文件,同时创建一个新的cpp文件,main/cpp/xxx.h和main/cpp/xxx.cpp

其中main/cpp/xxx.h自动生成

JNIEXPORT jstring JNICALL Java_com_hbs_androidjnitest_JniHelper_getStringTemp
  (JNIEnv *, jclass);

其中main/cpp/xxx.cpp自己创建的

#include <iostream>
#include <sstream>
#include "com_hbs_androidjnitest_JniHelper.h"
JNIEXPORT jstring JNICALL Java_com_hbs_androidjnitest_JniHelper_getStringTemp(JNIEnv *env, jclass instance){
    std::stringstream ss;
    ss << "Hello from c++ " << std::endl;
    return env->NewStringUTF(ss.str().c_str());
}
  • 4.在app目录下创建一个CMakeLists.txt
  # cmake version
  cmake_minimum_required(VERSION 3.4.1)
  # 支持 -std=gnu++11
  set(CMAKE_VERBOSE_MAKEFILE on)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
  # CMAKE_SOURCE_DIR 是 CMakeLists.txt 所在的目录
  add_library( my-lib SHARED ${CMAKE_SOURCE_DIR}/src/main/cpp/native-lib.cpp )
  find_library( log-lib log )
  target_link_libraries( my-lib ${log-lib} )    
  • 5.修改app目录下的build.gradle

defaultConfig 中添加

 // code block added by myself
        externalNativeBuild {
            cmake {
                // 指定编译器参数
                cppFlags "-std=c++11 -frtti -fexceptions"
                // 生成.so库的目标平台
                abiFilters 'armeabi', 'armeabi-v7a', 'x86'
            }
        }

android中添加

 // code block added by myself
    // 指定 CMakeLists.txt 相对此 build.gradle 文件的路径
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
  • 6.生产.so文件

    点击:View–Tool Windows–Gradle看编辑器右侧:app–Tasks–build–build
    生成目录:build\intermediates\cmake\debug\obj

  • 7.使用生产.so文件
    将生成的.so文件复制到src/main/jniLib文件夹下
    修改1中创建的java文件

public class JniHelper {
    static {
        System.loadLibrary("my-lib");
    }
    public static native String getStringTemp();

}

函数调用此方法

JniHelper.getStringTemp()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记住我的名字啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值