Koolearn视频播发器 框架分享
本文简要介绍一下播放器UI库,以便相关项目成员对播放器UI库有一个整体的认识
一、公司安卓播放器架构组成
分四层:业务层、播放器UI层、播放器层、底层
本文简要介绍一下播放器UI库,以便相关项目成员对播放器UI库有一个整体的认识
分四层:业务层、播放器UI层、播放器层、底层
项目起因:设计师想做一个类似喜马拉雅的每日精选功能d交互动画,于是乎直接下了一个喜马拉雅的App文件,通过反编译,找到相关代码并研究,然后结合自身掌握的知识照猫画虎就实现了。
项目描述:因一个不错的试题交互实现,遗憾一直没时间整理,只能在这里占位了。新东方托福Pro、新东方雅思Pro的听说读写题干部分、句子反显、单词反显、填空题交互、文章句子定位,都是采用的这个框架去实现的。
项目起因:前端资源紧张,原生资源补充
研究背景: 公司四六级的开发,由于产品经理感觉四六级内容数据不是很完美,例句信息不够完善,感觉某款App的内容比较不错,所以让我尝试破解此app得到相关四六级词本的信息,于是.........
jarsigner -verbose -keystore keystore文件路径 -signedjar 签名后生成的apk路径 待签名的apk路径 别名
进入app官方网站:识别二维码 得到下载地址进行下载
安卓系统基于Linux,但Binder是安卓独有的跨进程通信方式
targetSdkVersion 是设置希望的SDK版本,如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。 也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。
但是,这个设置仅仅是一个声明、一个通知,不会有太实质的作用, 比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低版本中是不支持的,那么在低版本的API设备上运行程序时,可能会报错:Java.lang.VerifyError。也就是说,此属性不会帮你解决兼容性的测试问题。
js调用java的时候,如果设置了targetSdkVersion,当targetSdkVersion<17时没问题,targetSdkVersion>=17时不成功 如果您在编写HTML5应用,需要在JS代码中访问Java中的函数,则您会用到WebView的addJavascriptInterface()函数。因为安全问题,在Android4.2中(如果应用的android:targetSdkVersion数值为17+)JS只能访问带有 @JavascriptInterface注解的Java函数。 之前,任何Public的函数都可以在JS代码中访问,而Java对象继承关系会导致很多Public的函数都可以在JS中访问,其中一个重要的函数就是 getClass()。然后JS可以通过反射来访问其他一些内容。通过引入 @JavascriptInterface注解,则在JS中只能访问 @JavascriptInterface注解的函数。这样就可以增强安全性。
如果您的应用android:targetSdkVersion数值为17或者大于17记得添加 @JavascriptInterface 注解。
首先针对未加固的资源包进行反编译 使用命令:apktool d Koolearn_v3.6.0.apk 解压完后发现 布局文件都是可以直接看到的,并未发生任何变化,包括资源文件的命名。
微信AndResGuard
未采用时 包大小,采用后包大小 35.4 32.6M 未采用时 资源文件直接查看,采用后资源文件名,布局文件名等都已被混淆,但是文件内容并未混淆
进度业务: 既有时间点概念,对应观看进度; 也有时间片概念, 对应统计时长
视频分为:直播 直播回放 录播
问题 | 原因 | 问题发生位置 |
---|---|---|
国外学员问题 | 字符串转换成浮点数时,国外的小数点会变成逗号,导致上传失败 | 上传进度组装数据前 |
只上传一次问题 | 更新VideoProcess时,是否上传标志位设置错误 | 存储时 |
混淆策略
混淆策略是每个应用必须增加的一种防护策略,同时他不仅是为了防护,也是为了减小应用安装包的大小,所以他是每个应用发版之前必须要添加的一项功能
我们一般现在的破解查看Java层代码就是两种方式:
一种是直接先解压classes.dex文件出来,使用dex2jar工具转化成jar文件,然后再用jd-gui工具进行查看类结构
一种是使用apktool工具直接反编译apk,得到smali源码,阅读smali源码