android 视频录制 混淆打包 之native层 异常的解决

  • 时间:
  • 浏览:1
  • 来源:UU快3—全天最准大发快三

  网上查资料后发现javacv一些提供了视频录制功能,一些含晒 有视频编辑等图像出理 功能。在javacv的开源项目链接能都还可否下载它:https://code.google.com/p/javacv/  

原文地址:http://www.cnblogs.com/linguanh/    (滑至文章末,直接看出理 方式 )

具体大问题:

从下往上看,到最后提示的是 加载动态链接库 libjniPointer.so 出大问题了,这是一处比较重要的信息,还有两处分别是  javacpp.loader.loadLibrary  、 nativeLibraryDirectories=[/data/app/cn.itguy.recordvideodemo-1/lib/arm, /vendor/lib, /system/lib]] ,它们告诉了我三点, 这些大问题是加载 linux 下的动态库失败,找这么,由jar包顶端的loader类中的loadLibrary函数触发,最终找这么的位置是手机系统的的lib库,system、vendor。

前序:

首先打 log 跟踪到->,在new AVPacket() 顶端抛出异常,朋友 点进去->,一些allocate()这么一些操作,朋友 能都还可否跳过它,在此类里查找 static 静态块,它先于构造函数执行->->->->,看过loadLibrary了-> 最终getRunTime,整条线索对应 异常信息,到了这里,这里是系统的 system 类,当 libName = “libjnipointer” 的事先,找这么。  推测,是系统的一些资源被混淆了。朋友 的混淆配置含晒 一句设置:-keepattributes 保护给定的可选属性,这么朋友 能都还可否用它保护下项目的注释、资源文件、资源目录名、结构类等,类事另有有一个:,事实证明,当我上加到 InnerClasses 的事先,大问题出理 。

真正出理

  于当天晚上整合好项目,准备第一次的混淆打包(release模式),一些第一次测试,结果,我意料中的事情存在了,没错,一些在混淆后总是存在的各种 蹦,对于类事大问题,不吹不黑,我经验算是丰沛 的了,一般能都还可否在 proguard-rules 文件(android studio) 下做混淆设置出理 的,但我不得不承认,这些是我迄今遇到最棘手的,直到 15:46 才正式出理 ,为甚说都 4 天了,百度上这么直接的出理 信息,逐择文以告之。

  在执行了顶端的设置后,一些还不行说说,基本上再百度也没哪此用了,一些百度顶端这么,等我发完这篇文章估计这么。

  好了,前面吹了这么多,先说下我遇到的奇葩大问题先。

  前四天,一些项目顶端有个类事 仿微信 视频录制的功能, 先是上网找了个 开源项目:https://github.com/qdrzwd/VideoRecorder,下载下来,在 debug 非混淆的模式下 测试了几块,其实 效果还不错,便在它的基础上进行了 二次开发。

  一些一些混淆配置文件--proguard-rules:具体的所有操作,网上有很全部的例子,我这里不废话,直接针对我遇到的请况开刀

大问题起因:

  再回到大问题的根源, 它是加载由jar包顶端的loader类中的loadLibrary函数触发,最终找这么的位置是手机系统的的lib库,system、vendor 下的jniPointer.so,朋友 为甚办啊?看源码,还是得另有有一个的,下面我贴出我的查找路径,所有代码是 这些 视频录制 开源项目、javacpp 顶端的:

  先说说这些开源项目的背景吧,它是基于 Vine 的背景下进行开发的,Vine 是外国的有有一个 做短视频分享起家的公司,也是朋友 APP 的名字,后被Twitter收购,目前网上的录制视频能都还可否基于android自带的MediaRecorder类,一些这些移觉较鸡肋,实话实说,用处能都还可否很大,用来练习下还是能都还可否的。Vine  录制视频使用javacv自带的api, 录制声音使用的是android的AudioRecord,同样,这些开源项目也是基于 二者 开发的。这里顺便说下,微信用的库,微信和微视一样,用的是买车人编译的 ffmpeg库,vine使用的是javacv库。看过这里,你是能都还可否在想,我是为甚知道的?其实 很简单,去网上下载这几块 APP,反编译下,看看 libs 下的 .so 就知道了。

  是能都还可算是种想去手机system/lib 顶端看看有这么 jniPointer.so 的冲动?事实不用去看,我前面说过在 debug 下是没大问题的,也就证明了这些库必然存在,找这么是一些混淆的愿因。

  在混淆文件中上加  保护下项目的注释、资源文件、资源目录名、结构类(主要的出理 项)

  首先点开用到的jar包    为了保证 顶端的包不被混编,朋友 会使用   -keep 和 -dontwarn,一些再补上一句不混淆 native方式 ->,依赖注入不混淆->,还不放心说说,能都还可否狠点再次指出属性和方式 能都还可否混淆->,看过这里,朋友 会想,应该行了,一般是行的,一些有同志会指出要保护下 .so 啊,-libraryjars libs/xxx.so 另有有一个子,其实 不用,.so 默认不混淆的,所有顶端的做法,一般来说,是行的,一些,对于这些视频录制来说,还不行。

出理 方式 :

通常的做法:

  一些类事大问题是库找这么,一般朋友 回去买车人项目顶端的 .so 文件夹中找找有木有,这是有一种盲目的做法,首先应该看错误信息,类事顶端的,找这么的路径的 system/lib 也就和本地项目文件夹无关,事实也是另有有一个,libjniPointer.so 这些东东,另有有一个项目顶端一些这么的。