[✔️]ffmpeg Android 打包

简介: [✔️]ffmpeg Android 打包

一个jni调用ffmpeg的demo


The LOCAL_SRC_FILES for a prebuilt library should only contain one item


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos_crypto_static
LOCAL_MODULE_FILENAME := crypto
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcrypto.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/android
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := cocos_ssl_static
LOCAL_MODULE_FILENAME := ssl
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libssl.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/android
include $(PREBUILT_STATIC_LIBRARY)


CPU架构


1、armeabi-v7a:  第7代及以上的 32位ARM 处理器


2、arm64-v8a: 第8代、64位ARM处理器


3、armeabi: 第5代、第6代的32位ARM处理器,早期的手机在使用,现在基本很少了。


4、x86:  Intel 32位处理器,在平板、模拟器用得比较多。


5、x86_64: Intel 64位处理器,在平板、模拟器用得比较多。


ABI 三元组
armeabi-v7a armv7a-linux-androideabi
arm64-v8a aarch64-linux-android
x86 i686-linux-android
x86-64 x86_64-linux-android
NDK 操作系统变体 主机标记
macOS darwin-x86_64
Linux linux-x86_64
64 位 Windows windows-x86_64


AArch64是ARMv8的一种执行状态。


若要使用 API 级别 21 的 minSdkVersion 针对 64 位 ARM Android 进行编译,可使用以下两种方法,您可以选择其中最方便的一种:


$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/clang++ \
    -target aarch64-linux-android21 foo.cpp


$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/aarch64-linux-android21-clang++ \
    foo.cpp


正确的写法是


#32bit  
ARCH=arm  
CPU=armv7-a  
#64bit  
ARCH=arm64  
CPU=armv8-a


 Error while executing process
F:\android-ndk-r15c\ndk-build.cmd with arguments 
{
  NDK_PROJECT_PATH=null 
  APP_BUILD_SCRIPT=E:\proj\tank5\client\frameworks\runtime-src\proj.android-studio\app\jni\Android.mk 
  NDK_APPLICATION_MK=E:\proj\tank5\client\frameworks\runtime-src\proj.android-studio\app\jni\Application.mk 
  APP_ABI=armeabi 
  NDK_ALL_ABIS=armeabi 
  NDK_DEBUG=0 
  APP_PLATFORM=android-14 
  NDK_OUT=E:/proj/tank5/client/frameworks/runtime-src/proj.android-studio/app/build/intermediates/ndkBuild/release/obj 
  NDK_LIBS_OUT=E:\proj\tank5\client\frameworks\runtime-src\proj.android-studio\app\build\intermediates\ndkBuild\release\lib 
  NDK_TOOLCHAIN_VERSION=4.9 
  APP_PLATFORM=android-10 
  NDK_MODULE_PATH=
    E:/proj/tank5/client/frameworks/runtime-src/Classes;
    E:/proj/tank5/client/frameworks/cocos2d-x;
    E:/proj/tank5/client/frameworks/cocos2d-x/cocos;
    E:/proj/tank5/client/frameworks/cocos2d-x/external 
  NDK_DEBUG=0 clean
}
Android NDK: android-10 is unsupported. Using minimum supported version android-14.
Android NDK: WARNING: Ignoring unknown import directory: my_relative_path
Android NDK: ERROR:E:/proj/tank5/client/frameworks/cocos2d-x/external/ffmpeg/prebuilt/android/Android.mk:cocos_ffmpeg_libavcodec: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that E:/proj/tank5/client/frameworks/cocos2d-x/external/ffmpeg/prebuilt/android/armeabi/libavcodec.a exists  or that its path is correct
F:/android-ndk-r15c/build//../build/core/prebuilt-library.mk:45: *** Android NDK: Aborting    .  Stop.


ninja: error:xxx, needed by xxx, missing and no known rule to make it


ninja: error: '/XXX/NDKApplication/app/src/main/cpp/src/main/cpp/armeabi-v7a/libavcodec.so',
needed by '/XXX/NDKApplication/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libhf_code.so', missing and no known rule to make it


检查IMPORTED_LOCATION,底层不会自动补全lib,所以必须是存在的值


set_target_properties(${lib} PROPERTIES
        IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/lib${lib}.so
        #                                            ↑ 底层不会补全这个lib  
)


ndk build android.mk添加外部so


  • jni/Android.mk


LOCAL_SHARED_LIBRARIES += cocos_ffmpeg_libavformat
# ...
$(call import-add-path,$(LOCAL_PATH)) # 模块查找路径
$(call import-module,ffmpeg/)


  • ffmpeg/Android.mk


include $(CLEAR_VARS)
LOCAL_MODULE := cocos_ffmpeg_libavformat
LOCAL_MODULE_FILENAME := libavformat                 # 注意这个名字,要和下边的对应
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libavformat.so # 注意这个名字,要和上边的对应
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include
include $(PREBUILT_SHARED_LIBRARY)


最终apk包里面会有这个文件: apk/lib/arm64-v8a/libavformat.so


Execution failed for task: externalNativeBuildDebug FAILED


有可能是编译so的ndk版本高于了项目使用的ndk版本


project ndk version >= so ndk version


ndk Unexpected native build target Valid values are:


so库有问题


externalNativeBuild {
    ndkBuild {
        if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
            // skip the NDK Build step if PROP_NDK_MODE is none
            targets 'cocos2dlua'
            arguments 'NDK_TOOLCHAIN_VERSION=4.9'
            arguments 'APP_PLATFORM=android-' + PROP_APP_PLATFORM
            def module_paths = [project.file("../../Classes").absolutePath,
                                project.file("../../../cocos2d-x").absolutePath,
                                project.file("../../../cocos2d-x/cocos").absolutePath,
                                project.file("../../../cocos2d-x/external").absolutePath]
            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                // should use '/'
                module_paths = module_paths.collect { it.replaceAll('\\', '/') }
                arguments 'NDK_MODULE_PATH=' + module_paths.join(";")
            } else {
                arguments 'NDK_MODULE_PATH=' + module_paths.join(':')
            }
            arguments '-j' + Runtime.runtime.availableProcessors()
            abiFilters.addAll(PROP_APP_ABI.split(':').collect { it as String })
        }
    }
}


  • gradlew.properties


PROP_APP_ABI=armeabi:armeabi-v7a:arm64-v8a


如果PROP_APP_ABI缺失arm64-v8a就会被过滤掉,build.gradle里面abiFilter就是写了arm64-v8a也没用,项目配置的一个大坑!

目录
相关文章
|
9月前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
412 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
9月前
|
敏捷开发 Java 机器人
云效产品使用常见问题之打包后的Android应用获取下载地址失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
12天前
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
70 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
1月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
36 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
2月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
87 11
|
8月前
|
安全 Java Android开发
05. 【Android教程】Android 程序签名打包
05. 【Android教程】Android 程序签名打包
88 1
|
4月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
142 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
6月前
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
515 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
9月前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
157 3
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
7月前
|
Android开发
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
205 0

热门文章

最新文章

  • 1
    Ubuntu编译ffmpeg解决错误:ERROR: avisynth/avisynth_c.h not found
  • 2
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 5
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡