6 . 修改脚本权限 : chmod -R 777 build.sh 命令 , 修改 build.sh 脚本权限 ;
root@octopus:~/rtmp/x264-master# ls AUTHORS build.sh config.guess configure doc example.c filters Makefile tools x264.c x264dll.c x264res.rc autocomplete.c common config.sub COPYING encoder extras input output version.sh x264cli.h x264.h root@octopus:~/rtmp/x264-master# chmod -R 777 build.sh
7 . 执行编译脚本 : 执行 ./build.sh 编译脚本 , 编译后 , 生成的结果如下 ;
三、 Android Studio 导入函数库
1 . 拷贝文件 : 拷贝上面编译好的头文件与函数库到 Android Studio 工程中 , 没有目录的创建目录 ;
2 . 编辑 build.gradle 构建脚本 : 只在生成的代码基础上 , 添加了 abiFilters ‘armeabi-v7a’ 内容 ;
apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "kim.hsl.rtmp" minSdkVersion 21 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { cppFlags "" abiFilters 'armeabi-v7a' } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" version "3.10.2" } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' }
3 . 编辑 CMakeList.txt 构建脚本 : 这是 src/main/cpp 下的 CMakeList.txt 构建脚本 ;
cmake_minimum_required(VERSION 3.4.1) # 链接 src/main/cpp/librtmp 目录下的构建脚本 add_subdirectory(librtmp) add_library( # 函数库名称 native-lib # 动态库类型 SHARED # 源文件 native-lib.cpp ) find_library( # 日志库 log-lib log ) # 设置头文件搜索路径 include_directories(include) # 通过设置编译选项, 设置函数库的搜索路径 # 此处的 ANDROID_ABI 是在 # build.gradle android->defaultConfig->externalNativeBuild->cmake # 下的 abiFilters 中设置 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}") target_link_libraries( # 链接动态库 native-lib # 编译的 rtmp 静态库 rtmp ${log-lib} )
四、 交叉编译版本
1 . 交叉编译 Android 库版本 : 在 Ubuntu 中进行交叉编译时 , 使用的是 android-21 版本的函数库与头文件 ,
# 截取的两个配置片段 FLAGS="...-D__ANDROID_API__=21..." ./configure \ ... --sysroot=$NDK_ROOT/platforms/android-21/arch-arm \ ...
2 . Android APP 中的最低版本 : Android 项目中的 build.gradle 中配置对应的最低兼容版本 , 也要是 21 版本 ;
apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "kim.hsl.rtmp" // 核心 --------------------------------- minSdkVersion 21 // 核心 --------------------------------- targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { cppFlags "" abiFilters 'armeabi-v7a' } } } ... } ...
Ubuntu 中的交叉编译版本 , 与 Android 应用的最低兼容版本 , 一定要保持一致 ;
五、 GitHub 项目地址
GitHub 地址 : han1202012 / RTMP_Pusher