近期刚好用到FFmpeg来处理视频编码,由于网上各种版本的so库大部分都32位的,所以打算自己来编译32位和64位的库,我之前有写编译32位的库https://cloud.tencent.com/developer/article/1661468里面有关于ndk和32位的相关配置。今天主要是总结一下FFmpeg的64位的动态库编译。
版权声明:本文为[他叫自己Mr.张]的原创文章,转载请注明出处,否则禁止转载。 https://micro.blog.csdn.net/article/details/51933453
② 主要作用 : 主要作用是配置本工程中的 C/C++ 源码如何编译成动态库的 ;
最近,各大应用市场都在推动应用支持 64 位架构,你的 App 已经支持了吗?在这篇文章里,我将带你完成 64 位架构的的适配工作。同时会带你建立关于 ABI 的基本认识,并为你带来我的 Gradle 插件 EasyPrivacy,帮助你检测工程中的 64 位适配问题。如果能帮上忙,请务必点赞加关注,这真的对我非常重要。
Android Studio 2.2 及以后的版本默认使用CMake进行 NDK 编译, 其中最吸引人的地方是,在开发NDK程序时可以进行联机调试,这真是大在的方便了开发者开发NDK程序的效率了。 那么使用CMake编译NDK程序是否与我们之前介绍的使用ndk-build编译有很大的不同呢?下面我们就来一窥它的原理。
在上一篇博客 【Android 安装包优化】native 层 jni 中使用 7zr 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 ) 中 , 交叉编译出了 4 种 CPU 架构的动态库 ;
上一篇博客 【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 ) 编译了可以在 Android 平台执行的 7zr 可执行程序 ;
我负责的项目A要求有播放在线视频的功能,当时从别人的聊天记录的一瞥中发现百度有相关的SDK,当时找到的是Baidu-T5Player-SDK-Android-1.4s,项目中Demo的so库只有armeabi-v7a 版的,由于需要使用的时候拷贝一些界面和图片资源到现有的项目中,所以我就索性直接打包成了aar,经过一番修改就上线了。
早期的Android系统几乎只支持ARMv5的CPU架构,后面发展到支持七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。 应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。 在Android 系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。 但是最新的谷歌官方文档已经把mips和armv5移除了,如图所示:
在这公司那么久也没有弄过ndk开发,作为一个做刷卡头和蓝牙pos的安卓开发程序员这点还是很蛋疼,然后现在重新做一个新的项目,因为以前的so库是放在armeabi文件夹下面的,所以不管是安卓4.4以下还是5.0+是都可以用的,然后里面加了下分享的功能,微信和qq分享还好没有so库,但是新浪微博的就不一样了,里面有7中cpu架构文件,再加上百度的定位,操蛋的事情就发生了,如果删除其他文件夹然后新浪分享时异常,还好百度定位的没有崩溃,然后全部保留吧,硬件连接又出错,果断和硬件厂商联系了下,叫他们提供so库,因为so库为二进制码技术有限不能逆向再重新生成多so库。
B(l)utter是一款针对Flutter移动端应用程序的逆向工程分析工具,当前版本的B(l)utter仅支持Android libapp.so(ARM64),可以帮助广大研究人员对基于Flutter开发的移动端应用程序进行逆向工程分析。
在Android 程序开发中,往往需要根据实际的业务需求和工程管理要求,做一些定制开发。本文介绍常用的Android工程管理与配置。
Android TencentMeetingSDK默认包含armeabi-v7a和arm64-v8a这两种架构so,对于绝大多数android机型,现在已经支持运行64位应用, 因此我们可以根据自身情况,通过gradle脚本来配置构建出只包含64位架构so的apk来减小apk的体积,具体配置如下:
早期的Android系统几乎只支持ARMv5的CPU架构,你知道现在它支持多少种吗?7种!
前不久,我们准备将自己开发的视频播放sdk提供给公司其他部门,在打包的时候,同事问了我一个问题,为什么我们打sdk的时候需要分别提供armeabi和arm64-v8a(ps,还有其他7种CPU架构)。其实这是一个常识问题,针对不同的架构我们肯定要提供不同的动态链接库,所以,在实际开发过程中,我们并不是将这7种so库都集成到我们的项目中去,我们会根据实际情况做一个取舍。 那么旧事重提,我们再来看看Android动态链接库。 简介 早期的Android系统几乎只支持ARMv5的CPU架构,不过到目前为止支持7种
FFmpeg 是一款知名的开源音视频处理软件,它提供了丰富而友好的接口支持开发者进行二次开发。
1 . 错误分析 : 提示没有在 /data/app/kim.hsl.rtmp-1/lib/x86, /system/lib, /vendor/lib 这几个目录中找到 NDK 的入口动态库 libnative-lib.so ;
导语 近年来,随着计算机硬件的不断发展,32位的旧架构程序的性能瓶颈越来越明显了,适配64位已经是业内公认的大势所趋,从工业化的大型商用软件到移动平台上的app,都已经将适配64位提上了日程。在Android平台,大多数设备都采用Arm架构,最新的64位架构则是Arm64-v8a,全民k歌也将顺应潮流,拥抱64位程序的时代。 本次适配工作由全民k歌Android团队合作完成 1.背景 ARM架构,也被称作高级精简指令集机器(Advanced RISC Machine),是一个精简指令集(RISC)处理器架
Android Studio 3之前,需要编写Android.mk和Application.mk文件。
刚开始做纯 C++ 跨端的项目时,为了考虑项目的统一工程化管理选择使用 CMake + Conan,因为各平台下使用的工具链、 IDE 都不一样。如 Windows 更多人习惯使用 Visual Studio IDE、针对 iOS 和 macOS 的开发更多人喜欢使用 Xcode,而 Linux 开发往往是 VSCode 配套。针对不通平台的 CMake 初始化命令都不太一样,主流的配置有如下几种:
arm64-v8a是可以向下兼容的,其下有armeabi-v7a,armeabi armeabi-v7a向下兼容armeabi
在 Google Play 中 , 管理并创建内部测试版本 , 上传完毕后 , 检查版本时 , 出现如下错误 ;
参考 https://github.com/bilibili/ijkplayer 项目的编译过程 ;
上篇 我们通过Java sdk的方式已经将opencv接入到项目中了,如果想使用opencv sdk 提供的 C++ 头文件与 .so动态库,自己封装jni这样使用上篇的方式显然是不能实现的。所以本篇我们介绍通过cmake的方式接入opencv。
参考 【错误记录】Google Play 上架报错 ( 此版本不符合 Google Play 关于提供 64 位版本应用的要求 ) 博客 ;
NDK 开发 , 在调用 JNI 对应 Java 类时 , 静态代码块中 System.loadLibrary 语句调用时 , 报如下错误 ;
随着版本迭代,功能增加安装包体积也会慢慢增大。本文主要是介绍APK瘦身中用到的一些方法。
通过前面对TRTC的基本了解,本期我们开始尝试使用SDK在本地搭建开发环境,同时说明SDK的基本用法
目前在 gradle 中做 android jni 相关集成开发,有两种方式,通过 ndkBuild 或者 CMake 来支持,gradle 也内置了这两工具的集成
Android中有时候为了效率以及平台开发库的支持,难免会用到NDK开发,那么都会产生一个so文件,通过native方法进行调用,开发和调用步骤很简单,这里就不多说了,本文主要来介绍,我们在使用so的时候总是会出现一些常见的问题,而现在插件化开发也很普遍了,有时候插件中也会包含一些so文件,需要加载,这时候也会出现一些问题。本文就来详细总结一下这些问题出现的原因,以及解决方法,主要还是通过源码来分析。
在 build.gradle 构建脚本中 , 配置 ndk 编译的动态库 CPU 架构类型 ;
《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2 交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,前文又介绍了如何在Linux环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需x265的so库。
为何在使用Cmake编译JNI文件的时候,运行的时候,只会生成arm64-v8a架构的So打入Apk中,而并不会生成所有架构,如x86,mips等。
上篇文章我们介绍了如何快速在安卓上跑通OCR应用,本文以Android Studio 自带的C++ Native模板项目为例,详细讲解如何将OCR模型代码集成到您自己的项目中。
可以很明显的看到,就是addCircle方法发生的崩溃,崩溃的地方是系统类Path的方法
① 构建工具 : CMake 是 Android 中使用 C/C++ 构建原生库的默认工具 ;
编译 Luajit 库,的确是一个挑战。因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了。以前只是编译了适用于真机的 Luajit 库。最近在尝试编译模拟器 Luajit 库,就顺便梳理了下 Luajit 库的编译经验,供以后查阅。网上的讨论也是有一些,但是相当一部分都已经过时。或许等你看到这篇文章的时候,可能也只是能获得一些可能的经验来解决自己的编译问题。所以说,了解一些基本的编译知识,能勉强看懂 Luajit 的 make 文件,还是很有必要的。本篇是关于 Luajit 静态库的,如果你想找的是如何编译适用于移动端的 Luajit 字节码,可以直接看 【最新】LuaJIT 32/64 位字节码,从编译到使用全纪录。
NDK 全称 Native Development Kit,也就是原生开发工具包 ,官网对它有详细的 中文介绍 。可能一说到 NDK 或 JNI ,大家脑子里第一反应就是集成 C/C++ 。其实 JNI 的含义是 Java Native Interface ,这种接口允许 Java 和其他语言进行交互的,包括但不限于 C/C++ 。目前 Rust 也可以通过 JNI 来和 Java 交互,虽然不太成熟。
xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。
JniTest是在Android.mk里约束好的,关于Android.mk的编写具体在后面详解。
今天讲的是纯干货,目的就是为了指导Android开发者如何根据JNI Crash日志顺藤摸瓜,最后直捣黄龙定位磨人的JNI Crash。所以废话不多,直接开干吧。
CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型的CPU,下面是几个常见的类型:
Google 提供了一系列的 WebP 相关工具和函数库 , 如 cwebp , dwebp , gif2webp , img2webp 等工具 , libwebp 函数库 ;
做Android开发会遇到各种各样的问题,遇到问题不可怕,解决了并且知道为什么,下次遇到能马上解决就好了,今天要说的就是这个so库的使用采坑了。
App不但要求功能完善,其他方面也得综合考虑,比如APK安装包的文件大小就是很重要的因素。具备同样功能的两个安装包,一个很大很占用空间,另一个较小不怎么占空间,用户的选择结果自然不言而喻。如何减少打包后的APK文件大小,也就是所谓的APK瘦身,这涉及到很多技术手段,最常用的主要有四块:去除冗余功能、精简无用资源、减少图片大小、过滤无用的so文件,分别介绍如下:
安卓开发中使用Android studio集成三方SDK(比如腾讯视频云移动直播、播放器、短视频、实时音视频),通常有两种集成方式:aar集成、jar+so集成。安卓集成已经很成熟了,详见SDK集成指引。
今天发送两篇基础的JNI开发和配置的文章,可能大家很多都在应用层开发,但是我感觉JNI的基础配置和原理开发大家有必要了解一下,就推送两篇非常基础,大家都能看懂的文章,如果大家感觉现在用不到,可以稍微看两眼了解一下基础过程,对大家未来可能会有帮助。 随着Android Studio的推出,越来越多的开发者都把项目从Eclipse迁移到了Android Studio上,说明Android Studio相对Eclipse来说,具有很明显的优势。同样对于JNI开发来说,Android Studio的配置比Eclip
Android Studio 中使用 Android.mk 配置第三方 动态库 :
1.在其他目录中依赖flutter SDK [1240] plugins { id 'com.android.library' id 'kotlin-android' } // 在其他目录中依赖flutter SDK def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) {
大家好,又见面了,我是你们的朋友全栈君。 背景 Android 系统本质是一个经过改造的 Linux 系统,so库是Linux系统上使用的共享库(类似windows上的dll)。最早,Android 系统只支持 ARMv5 的 CPU 构架,随着 Android 系统的发展,又加入了 ARMv7 (2010), x86 (2011), MIPS (2012), ARMv8, MIPS64 和 x86_64 (2014)。每一种 CPU 构架,都定义了一种 ABI(Application Binary
领取专属 10元无门槛券
手把手带您无忧上云