皮皮网
皮皮网

【echarts图表源码】【源码在哪找】【stoi函数源码】ndk 导入源码_ndk开发教程

时间:2024-12-27 14:45:22 来源:Linux内核调试源码

1.如何在Android下使用JNI
2.Android开发中的入源NDK到底是什么?(详细解析+案例)
3.Android Studio NDK 编译 Bsdiff 库
4.Android使用c++库
5.ijkPlayer SDK 源码导入到Android Studio中各种问题解决 第二篇
6.Ubuntu 20.04上Android NDK编译FFmpeg 5.1全程笔记

ndk 导入源码_ndk开发教程

如何在Android下使用JNI

       ã€€ã€€1.引言

       ã€€ã€€æˆ‘们知道,Android系统的底层库由c/c++编写,上层Android应用程序通过Java虚拟机调用底层接口,衔接底层c/c++库与Java应用程序间的接口正是JNI(JavaNative Interface)。本文描述了如何在ubuntu下配置AndroidJNI的开发环境,以及如何编写一个简单的c函数库和JNI接口,并通过编写Java程序调用这些接口,最终运行在模拟器上的过程。

       ã€€ã€€2.环境配置

       ã€€ã€€2.1.安装jdk1.6

       ã€€ã€€ï¼ˆ1)从jdk官方网站下载jdk-6u-linux-i.bin文件。

       ã€€ã€€ï¼ˆ2)执行jdk安装文件

       ã€€ã€€[html] view plaincopyprint?

       ã€€ã€€.$chmod a+x jdk-6u-linux-i.bin

       ã€€ã€€.$jdk-6u-linux-i.bin

       ã€€ã€€$chmod a+x jdk-6u-linux-i.bin

       ã€€ã€€$jdk-6u-linux-i.bin

       ã€€ã€€(3)配置jdk环境变量

       ã€€ã€€[html] view plaincopyprint?

       ã€€ã€€.$sudo vim /etc/profile

       ã€€ã€€.#JAVAEVIRENMENT

       ã€€ã€€.exportJAVA_HOME=/usr/lib/java/jdk1.6.0_

       ã€€ã€€.exportJRE_HOME=$JAVA_HOME/jre

       ã€€ã€€.exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

       ã€€ã€€.exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

       ã€€ã€€$sudo vim /etc/profile

       ã€€ã€€#JAVAEVIRENMENT

       ã€€ã€€exportJAVA_HOME=/usr/lib/java/jdk1.6.0_

       ã€€ã€€exportJRE_HOME=$JAVA_HOME/jre

       ã€€ã€€exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

       ã€€ã€€exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

       ã€€ã€€ä¿å­˜åŽé€€å‡ºç¼–辑,并重启系统。

       ã€€ã€€ï¼ˆ4)验证安装

       ã€€ã€€[html] view plaincopyprint?

       ã€€ã€€.$java -version

       ã€€ã€€.javaversion "1.6.0_"

       ã€€ã€€.Java(TM)SE Runtime Environment (build 1.6.0_-b)

       ã€€ã€€.JavaHotSpot(TM) Server VM (build .4-b, mixed mode)

       ã€€ã€€.$javah

       ã€€ã€€.用法:javah[选项]<ç±»>

       ã€€ã€€.其中[选项]包括:

       ã€€ã€€.-help输出此帮助消息并退出

       ã€€ã€€.-classpath<路径>用于装入类的路径

       ã€€ã€€.-bootclasspath<路径>用于装入引导类的路径

       ã€€ã€€.-d<目录>输出目录

       ã€€ã€€.-o<文件>输出文件(只能使用-d或-o中的一个)

       ã€€ã€€.-jni生成JNI样式的头文件(默认)

       ã€€ã€€.-version输出版本信息

       ã€€ã€€.-verbose启用详细输出

       ã€€ã€€.-force始终写入输出文件

       ã€€ã€€.使用全限定名称指定<ç±»>(例

       ã€€ã€€.如,java.lang.Object)。

       ã€€ã€€$java -version

       ã€€ã€€javaversion "1.6.0_"

       ã€€ã€€Java(TM)SE Runtime Environment (build 1.6.0_-b)

       ã€€ã€€JavaHotSpot(TM) Server VM (build .4-b, mixed mode)

       ã€€ã€€$javah

       ã€€ã€€ç”¨æ³•ï¼šjavah[选项]<ç±»>

       ã€€ã€€å…¶ä¸­[选项]包括:

       ã€€ã€€-help输出此帮助消息并退出

       ã€€ã€€-classpath<路径>用于装入类的路径

       ã€€ã€€-bootclasspath<路径>用于装入引导类的路径

       ã€€ã€€-d<目录>输出目录

       ã€€ã€€-o<文件>输出文件(只能使用-d或-o中的一个)

       ã€€ã€€-jni生成JNI样式的头文件(默认)

       ã€€ã€€-version输出版本信息

       ã€€ã€€-verbose启用详细输出

       ã€€ã€€-force始终写入输出文件

       ã€€ã€€ä½¿ç”¨å…¨é™å®šåç§°æŒ‡å®š<ç±»>(例

       ã€€ã€€å¦‚,java.lang.Object)。2.2.安装android应用程序开发环境

       ã€€ã€€ubuntu下安装android应用程序开发环境与windows类似,依次安装好以下软件即可:

       ã€€ã€€ï¼ˆ1)Eclipse

       ã€€ã€€ï¼ˆ2)ADT

       ã€€ã€€ï¼ˆ3)AndroidSDK

       ã€€ã€€ä¸Žwindows下安装唯一不同的一点是,下载这些软件的时候要下载Linux版本的安装包。

       ã€€ã€€å®‰è£…好以上android应用程序的开发环境后,还可以选择是否需要配置emulator和adb工具的环境变量,以方便在进行JNI开发的时候使用。配置步骤如下:

       ã€€ã€€æŠŠemulator所在目录android-sdk-linux/tools以及adb所在目录android-sdk-linux/platform-tools添加到环境变量中,android-sdk-linux指androidsdk安装包android-sdk_rxx-linux的解压目录。

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$sudo vim /etc/profile

       ã€€ã€€.exportPATH=~/software/android/android-sdk-linux/tools:$PATH

       ã€€ã€€. exportPATH=~/software/android/android-sdk-linux/platform-tools:$PATH

       ã€€ã€€$sudo vim /etc/profile

       ã€€ã€€exportPATH=~/software/android/android-sdk-linux/tools:$PATH

       ã€€ã€€exportPATH=~/software/android/android-sdk-linux/platform-tools:$PATH

       ã€€ã€€ç¼–辑完毕后退出,并重启生效。

       ã€€ã€€2.3.安装NDK

       ã€€ã€€NDK是由android提供的编译android本地代码的一个工具。

       ã€€ã€€ï¼ˆ1)从androidndk官网/sdk/ndk/index.html下载ndk,目前最新版本为android-ndk-r6b-linux-x.tar.bz2.

       ã€€ã€€ï¼ˆ2)解压ndk到工作目录:

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$tar -xvf android-ndk-r6b-linux-x.tar.bz2

       ã€€ã€€.$sudo mv android-ndk-r6b /usr/local/ndk

       ã€€ã€€$tar -xvf android-ndk-r6b-linux-x.tar.bz2

       ã€€ã€€$sudo mv android-ndk-r6b /usr/local/ndk

       ã€€ã€€ï¼ˆ3)设置ndk环境变量

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$sudo vim /etc/profile

       ã€€ã€€.exportPATH=/usr/local/ndk:$PATH

       ã€€ã€€$sudo vim /etc/profile

       ã€€ã€€exportPATH=/usr/local/ndk:$PATH

       ã€€ã€€ç¼–辑完毕后保存退出,并重启生效

       ã€€ã€€ï¼ˆ4)验证安装

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$ cd/usr/local/ndk/samples/hello-jni/

       ã€€ã€€.$ ndk-build

       ã€€ã€€.Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver

       ã€€ã€€.Gdbsetup : libs/armeabi/gdb.setup

       ã€€ã€€.Install : libhello-jni.so => libs/armeabi/libhello-jni.so

       ã€€ã€€$ cd/usr/local/ndk/samples/hello-jni/

       ã€€ã€€$ ndk-build

       ã€€ã€€Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver

       ã€€ã€€Gdbsetup : libs/armeabi/gdb.setup

       ã€€ã€€Install : libhello-jni.so => libs/armeabi/libhello-jni.so

       ã€€ã€€3.JNI实现

       ã€€ã€€æˆ‘们需要定义一个符合JNI接口规范的c/c++接口,这个接口不用太复杂,例如输出一个字符串。接下来,则需要把c/c++接口的代码文件编译成共享库(动态库).so文件,并放到模拟器的相关目录下。最后,启动Java应用程序,就可以看到最终效果了。

       ã€€ã€€3.1.编写Java应用程序代码

       ã€€ã€€ï¼ˆ1)启动Eclipse,新建android工程

       ã€€ã€€Project:JNITest

       ã€€ã€€Package:org.tonny.jni

       ã€€ã€€Activity:JNITest

       ã€€ã€€ï¼ˆ2)编辑资源文件

       ã€€ã€€ç¼–辑res/values/strings.xml文件如下:

       ã€€ã€€

       ã€€ã€€ç¼–辑res/layout/main.xml文件

       ã€€ã€€æˆ‘们在主界面上添加了一个EditText控件和一个Button控件。

       ã€€ã€€ï¼ˆ3)编辑JNITest.java文件

       ã€€

       ã€€ã€€static表示在系统第一次加载类的时候,先执行这一段代码,在这里表示加载动态库libJNITest.so文件。

       ã€€ã€€å†çœ‹è¿™ä¸€æ®µï¼š

       ã€€ã€€[java] view plaincopyprint?

       ã€€ã€€.privatenativeString GetReply();

       ã€€ã€€privatenativeString GetReply();

       ã€€ã€€native表示这个方法由本地代码定义,需要通过jni接口调用本地c/c++代码。

       ã€€ã€€[java] view plaincopyprint?

       ã€€ã€€.publicvoidonClick(View arg0) {

       ã€€ã€€.edtName.setText(reply);

       ã€€ã€€.}

       ã€€ã€€publicvoidonClick(View arg0) {

       ã€€ã€€edtName.setText(reply);

       ã€€ã€€}

       ã€€ã€€è¿™æ®µä»£ç è¡¨ç¤ºç‚¹å‡»æŒ‰é’®åŽï¼ŒæŠŠnative方法的返回的字符串显示到EditText控件。

       ã€€ã€€ï¼ˆ4)编译工程,生成.class文件。

       ã€€ã€€3.2.用javah工具生成符合JNI规范的c语言头文件

       ã€€ã€€åœ¨ç»ˆç«¯ä¸­ï¼Œè¿›å…¥android工程所在的bin目录

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$cd ~/project/Android/JNITest/bin

       ã€€ã€€$cd ~/project/Android/JNITest/bin

       ã€€ã€€æˆ‘们用ls命令查看,可以看到bin目录下有个classes目录,其目录结构为classes/org/tonny/jni,即classes的子目录结构是android工程的包名org.tonny.jni。请注意,下面我们准备执行javah命令的时候,必须进入到org/tonny/jni的上级目录,即classes目录,否则javah会提示找不到相关的java类。

       ã€€ã€€ä¸‹é¢ç»§ç»­ï¼š

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$cd classes

       ã€€ã€€.$javah org.tonny.jni.JNITest

       ã€€ã€€.$ls

       ã€€ã€€.org org_tonny_jni_JNITest.h

       ã€€ã€€$cd classes

       ã€€ã€€$javah org.tonny.jni.JNITest

       ã€€ã€€$ls

       ã€€ã€€org org_tonny_jni_JNITest.h

       ã€€ã€€æ‰§è¡Œjavahorg.tonny.jni.JNITest命令,在classes目录下会生成org_tonny_jni_JNITest.h头文件。如果不进入到classes目录下的话,也可以这样:

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$javah -classpath ~/project/Android/JNITest/bin/classesorg.tonny.jni.JNITest

       ã€€ã€€$javah -classpath ~/project/Android/JNITest/bin/classesorg.tonny.jni.JNITest

       ã€€ã€€-classpath 参数表示装载类的目录。

       ã€€ã€€3.3.编写c/c++代码

       ã€€ã€€ç”Ÿæˆorg_tonny_jni_JNITest.h头文件后,我们就可以编写相应的函数代码了。下面在android工程目录下新建jni目录,即~/project/Android/JNITest/jni,把org_tonny_jni_JNITest.h头文件拷贝到jni目录下,并在jni目录下新建org_tonny_jni_JNITest.c文件,编辑代码如下:

       ã€€ã€€[cpp] view plaincopyprint?

       ã€€ã€€.#include<jni.h>

       ã€€ã€€.#include<string.h>

       ã€€ã€€.#include"org_tonny_jni_JNITest.h"

       ã€€ã€€.

       ã€€ã€€.

       ã€€ã€€.JNIEXPORTjstring JNICALLJava_org_tonny_jni_JNITest_GetReply

       ã€€ã€€.(JNIEnv *env, jobject obj){

       ã€€ã€€.return(*env)->NewStringUTF(env,(char*)"Hello,JNITest");

       ã€€ã€€.}

       ã€€ã€€#include<jni.h>

       ã€€ã€€#include<string.h>

       ã€€ã€€#include"org_tonny_jni_JNITest.h"

       ã€€ã€€JNIEXPORTjstring JNICALLJava_org_tonny_jni_JNITest_GetReply

       ã€€ã€€(JNIEnv *env, jobject obj){

       ã€€ã€€return(*env)->NewStringUTF(env,(char*)"Hello,JNITest");

       ã€€ã€€}

       ã€€ã€€æˆ‘们可以看到,该函数的实现相当简单,返回一个字符串为:"Hello,JNITest"

       ã€€ã€€3.4.编写Android.mk文件

       ã€€ã€€åœ¨~/project/Android/JNITest/jni目录下新建Android.mk文件,android可以根据这个文件的编译参数编译模块。编辑Android.mk文件如下:

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.LOCAL_PATH:= $(call my-dir)

       ã€€ã€€.include$(CLEAR_VARS)

       ã€€ã€€.LOCAL_MODULE := libJNITest

       ã€€ã€€.LOCAL_SRC_FILES:= org_tonny_jni_JNITest.c

       ã€€ã€€.include$(BUILD_SHARED_LIBRARY)

       ã€€ã€€LOCAL_PATH:= $(call my-dir)

       ã€€ã€€include$(CLEAR_VARS)

       ã€€ã€€LOCAL_MODULE := libJNITest

       ã€€ã€€LOCAL_SRC_FILES:= org_tonny_jni_JNITest.c

       ã€€ã€€include$(BUILD_SHARED_LIBRARY)

       ã€€ã€€LOCAL_MODULE表示编译的动态库名称

       ã€€ã€€LOCAL_SRC_FILES 表示源代码文件

       ã€€ã€€3.5.用ndk工具编译并生成.so文件

       ã€€ã€€è¿›å…¥åˆ°JNITest的工程目录,执行ndk-build命令即可生成libJNITest.so文件。

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$cd ~/project/Android/JNITest/

       ã€€ã€€.$ndk-build

       ã€€ã€€.Invalidattribute name:

       ã€€ã€€.package

       ã€€ã€€.Install : libJNITest.so => libs/armeabi/libJNITest.so

       ã€€ã€€$cd ~/project/Android/JNITest/

       ã€€ã€€$ndk-build

       ã€€ã€€Invalidattribute name:

       ã€€ã€€package

       ã€€ã€€Install : libJNITest.so => libs/armeabi/libJNITest.so

       ã€€ã€€å¯ä»¥çœ‹åˆ°ï¼Œåœ¨å·¥ç¨‹ç›®å½•çš„libs/armeabi目录下生成了libJNITest.so文件。

       ã€€ã€€3.6.在模拟器上运行

       ã€€ã€€ï¼ˆ1)首先,我们把android模拟器启动起来。进入到emulator所在目录,执行emulator命令:

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$cd ~/software/android/android-sdk-linux/tools

       ã€€ã€€.$./emulator @AVD-2.3.3-V -partition-size

       ã€€ã€€$cd ~/software/android/android-sdk-linux/tools

       ã€€ã€€$./emulator @AVD-2.3.3-V -partition-size

       ã€€ã€€AVD-2.3.3-V表示你的模拟器名称,与在Eclipse->AVDManager下的AVDName对应,-partition-size表示模拟器的存储设备容量。

       ã€€ã€€ï¼ˆ2)接下来,我们需要把libJNITest.so文件拷贝到模拟器的/system/lib目录下,执行以下命令:

       ã€€ã€€[plain] view plaincopyprint?

       ã€€ã€€.$cd ~/project/Android/JNITest/libs/armeabi/

       ã€€ã€€.$adb remount

       ã€€ã€€.$adb push libJNITest.so /system/lib

       ã€€ã€€. KB/s ( bytes in 0.s)

       ã€€ã€€$cd ~/project/Android/JNITest/libs/armeabi/

       ã€€ã€€$adb remount

       ã€€ã€€$adb push libJNITest.so /system/lib

       ã€€ã€€ KB/s ( bytes in 0.s)

       ã€€ã€€å½“在终端上看到有 KB/s ( bytes in 0.s)传输速度等信息的时候,说明拷贝成功。

       ã€€ã€€ï¼ˆ3)在终端上执行JNITest程序,这个我们可以在Eclipse下,右键点击JNITest工程,RunAs->Android Application,即可在模拟器上启动程序

Android开发中的NDK到底是什么?(详细解析+案例)

       在Android开发中,Native Development Kit (NDK)扮演着关键角色,教程它是入源一个用于快速开发C和C++动态库的工具包。NDK的教程主要目标是将编译后的.so文件与应用一起打包成APK,尤其适合需要JNI(Java Native Interface)技术的入源场景。

       NDK使用步骤如下:

       首先,教程echarts图表源码配置Android NDK环境。入源这包括下载并解压NDK工具包到指定路径,教程如:/Users/Carson_Ho/Library/Android/sdk/ndk-bundle。入源Android Studio会自动检测并集成,教程无需额外手动关联。入源

       关联项目与NDK:在Gradle配置文件中添加必要的教程配置,包括local.properties、入源gradle.properties和build.gradle中的教程ndk节点,确保项目每次都能正确使用NDK。入源

       创建本地C++代码文件,如test.cpp。注意文件命名规则,源码在哪找确保Java和C++接口的兼容性。

       接着,编写Android.mk和Application.mk文件,分别指定源码编译配置和平台相关配置,放在jni文件夹中。

       执行编译命令,生成.so库文件,一般会在src/main/jniLibs目录下找到。

       在MainActivity.java和对应的布局文件中,集成并调用NDK编写的C++代码。

       对于Android Studio 2.2及以上版本,NDK的集成更为方便,只需在创建工程时按照提示配置即可,无需额外安装和配置。

Android Studio NDK 编译 Bsdiff 库

       在构建web离线包时,需要实现增量更新来优化用户体验。增量更新通过对比新旧文件,stoi函数源码生成差分文件,让客户端仅下载差异部分,从而节省带宽流量。

       bsdiff算法是实现增量更新的一种常用技术。为了集成bsdiff库,首先需要下载相关源代码,包括bsdiff和依赖的bzip2库。在Android Studio中,需要配置对C和C++代码的支持,为生成.so文件做准备。创建一个专门用于.so生成的子module,并制定清晰的代码结构。

       在代码实现中,将bsdiff源码和bzip2源码分别置于cpp和bzip2目录下。注意调整头文件引用路径和屏蔽主函数入口。通过关联CMake文件和编写对应的CMakeLists.txt,配置Android Studio环境以生成.so文件。阻止关机源码在Java层,创建工具类调用Native方法,并实现差分和合并功能的实现。生成.so文件后,其他项目可直接引用。

       搭建完成后,通过测试验证功能的正确性。测试页面提供差分和合并按钮,模拟实际应用过程。通过测试,确保增量更新功能按照预期工作。

       在完成这些步骤后,基于Android Studio和CMake搭建的环境能够成功编译bsdiff.so库,并在项目中实现增量更新功能。此过程提供了完整的集成和测试流程,确保了功能的正确性和效率。相关源码已上传至GitHub,物流查询 源码可供参考和使用。

Android使用c++库

       在Android平台上使用C++库主要有三种方式。

       首先,可以直接使用C++库提供的Java接口。这种方式通常需要第三方C++库提供JNI接口,并且将.so文件整合进APK即可。

       其次,可以选择自己编写JNI接口。这种方法适用于第三方库或者自定义库,需要自行提供JNI接口并自行加载.so。

       最后,如果自己编写的C++库需要调用其他C++库,则需自行引入目标第三方库。

       举例说明第二种方式:进行NDK编译生成libtest.so,然后将libtest.so和libmylib.so放入APK。使用test接口时,无需额外前缀,加载libtest.so后,系统自动加载libmylib.so。

       第三种方式示例:先查看目录布局。进行NDK编译直接集成,将so加入APK即可。在使用者的Android.mk中引入,使用者的源码函数可以直接调用。注意在NDK编译的mk文件中,LOCAL_MODULE名字不需要带lib前缀,加载动态库时系统自动加载相关依赖。

       使用C++库时需注意以下几点:确保include语句位于mk文件末尾;使用$(call all-subdir-makefiles)仅引入当前目录下的子目录mk文件;对于赋值过的变量,使用+=追加值,:=会覆盖原有值;注释代码时避免使用\导致所有代码被注释;NDK编译的mk中,LOCAL_MODULE自动添加lib前缀,预编译使用PREBUILT_SHARED_LIBRARY;在已赋值变量上追加值应使用+=;NDK编译的mk文件中,加载动态库时自动加载依赖的动态库。

ijkPlayer SDK 源码导入到Android Studio中各种问题解决 第二篇

       在将ijkPlayer SDK导入Android Studio并进行编译过程中,我遇到了多个问题。这些问题在前篇博客《ijkPlayer SDK 源码导入Android Studio中各种问题解决 第一篇》中已经部分探讨过,zinyan.com。

       问题与解决

       问题一:Flavors错误

       在代码无误的情况下,运行时出现Flavors错误。原因在于ijkplayer项目的build.gradle版本过低,需添加一个维度名称到flavorDimensions。只需定义任意维度名即可解决问题。

       问题二:exoplayer库缺失

       找不到com.google.android.exoplayer:exoplayer:r1.5.,可能由于网络问题或仓库不稳定。在ijkplayer-exo模块的build.gradle中,将依赖库切换至国内镜像如阿里云,添加相应配置后重新build即可。

       问题三:UnsatisfiedLinkError

       编译后的apk在运行视频时崩溃,原因是找不到本地的libijkffmpeg.so。检查发现项目中未包含so文件,需将本地依赖改为远程依赖或自行编译导入。

       问题四:NDK版本不匹配

       依赖的NDK版本与要求版本不一致,只需在Android Studio的SDK管理面板中下载.0.版本的NDK并安装,下载速度受网络影响。

       成功解决了这些问题后,ijkplayer-example项目可以运行,但so库仍需进一步处理。后续将有更多关于so库编译的内容,敬请关注。

Ubuntu .上Android NDK编译FFmpeg 5.1全程笔记

       在Ubuntu .上安装编译FFmpeg 5.1的过程,需要确保系统具备必要的开发环境。首先,安装`clang`和`yasm`,这两者对编译过程至关重要,它们的缺失可能导致编译时出现错误。

       执行以下命令以安装必需的工具:

       sudo apt install clang

       sudo apt-get install yasm

       这些命令将帮助解决编译过程中可能遇到的`clang is unable to create an executable file`、`clang: not found`和`nasm: not found`等问题。

       下一步是下载FFmpeg的源码,并切换到5.1版本的分支。执行以下命令以完成这些步骤:

       git clone gitee.com/mirrors/ffmpe...

       git checkout -b remotes/origin/release/5.1 remotes/origin/release/5.1

       确保使用与后续步骤相匹配的版本,下载并解压`android-ndk-rb-linux-x_.zip`文件。此步骤为编译FFmpeg提供了所需的NDK开发包。

       为位和位构建编译准备所需的配置脚本。通常,这些脚本可以直接使用,但需要调整与路径相关联的部分。

       将这些配置脚本复制到FFmpeg源码目录下,并执行。记得使用`sudo`权限执行,以确保成功无误。

       执行后,可以在指定目录下看到编译输出,包含`include`和`lib`部分,这些文件可用于开发。

       在Android Studio中,创建一个包含相关FFmpeg so文件的native C++工程。同步编译并导入FFmpeg头文件和库。配置CMakeList文件以包含这些库和头文件,然后编写测试代码。

       以`MainActivity.java`和`native-lib.cpp`为例,完成代码编写。最后运行应用,验证FFmpeg的集成和功能。

       实现完整的步骤和详细代码需通过特定的课程获取。此外,还有额外的专题课程和视频资源提供学习。确保查看相关链接以获取更多资源和深入指导。

更多内容请点击【时尚】专栏