记录一下,真机编译的时候没问题,用模拟器的时候报:INSTALL_FAILED_NO_MATCHING_ABIS,查了一下原因。就是因为为了提速用了、x86的模拟,所以。。。
还好stackoverflow有人解决了这些问题:
1、http://stackoverflow.com/questions/24572052/install-failed-no-matching-abis-when-install-apk
2、http://stackoverflow.com/questions/24751350/install-failed-no-matching-abis-how-to-overcome
解决起来还是比较简单的,在app/build.grade的android节点下增加:
XML/HTML代码
- abi {
- enable true
- reset()
- include 'x86', 'armeabi-v7a'
- universalApk true
- }
- }
一切就OK了,再编译的时候就:
XML/HTML代码
- 01/14 09:36:59: Launching app
- $ adb install-multiple -r /xxxxx/app/build/outputs/apk/app-x86-debug.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_5.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_6.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_9.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_2.apk /xxxxx/app/build/intermediates/split-apk/debug/dep/dependencies.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_8.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_7.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_3.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_4.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_0.apk /xxxxx/app/build/intermediates/split-apk/debug/slices/slice_1.apk
- Split APKs installed
- $ adb shell am start -n "com.xxxxx.app/com.xxxxx.app.activity.StartActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
- $ adb shell am startservice com.xxxxxx.app/com.android.tools.fd.runtime.InstantRunService
- Connected to process 3689 on device emulator-5554
居然切成了10个apk.....
迁移的时候发现,后台的fck编辑器出不来。以前是用firefox的所以没问题,后来也是在使用chrome的时候才有注意(新版的fckEditor早就没有这个问题了,新版已经叫CKEditor了)
1、修改admin/editor/fckeditor_php5.php ,现在应该没有人用4了,直接改5,
同名方法覆盖一下
- function IsCompatible()
- {
- global $HTTP_USER_AGENT;
-
- if(isset($HTTP_USER_AGENT)){
- $sAgent = $HTTP_USER_AGENT;
- } else{
- $sAgent = $_SERVER['HTTP_USER_AGENT'];
- }
-
- if(strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false){
- $iVersion = (float) substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3);
- return ($iVersion >= 5.5);
- } else{
- if(strpos($sAgent, 'Gecko/') !== false){
- $iVersion = (int) substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8);
- return ($iVersion >= 20030210);
- } else{
- if(strpos($sAgent, 'Opera/') !== false){
- $fVersion = (float) substr($sAgent, strpos($sAgent, 'Opera/') + 6, 4);
- return ($fVersion >= 9.5);
- } else{
- if(preg_match("|AppleWebKit/(\d+)|i", $sAgent, $matches)){
- $iVersion = $matches[1];
- return ($matches[1] >= 522);
- } else{
- return false;
- }
- }
- }
- }
- }
2、修改fckeditor.js,将两个配置的False改为true即可:
JavaScript代码
- this.EnableSafari = true ;
- this.EnableOpera = true ;
这两个默认是false,改为true即可。
再打开sablog的后台,就OK了。
--------纯记录,下次再手贱的时候就不需要折腾N久了
折腾了两个小时左右,sablog基本迁移成功(不过我是在全新代码下的,我线上的代码有过一部分改动,估计到时候还要折腾一下)
主要是几个地方:
1、db_mysql类。目前我凡是用到的地方,都已经判断过了。可能还有坑
2、preg_replace_callback,点了很多页面,目前也基本上都已经OK了。
原程序用的是error_reporting(0),所以一些notice,warning都不会显示 。所以极大的可能是一出错就白屏。我改成error_reporting(7),大部分问题都解决了。
准备什么时候迁移的时候再试一下。(服务器上还有不少站点。还要备份数据库,太累了,升还是不升,这是个问题!)
这两天一直在纠结视频相关。用MP4的话,直接video标签+mp4的话,默认缓冲至少要5M左右 。如果是移动端,5M 花的时间太长了。所以才尝试用m3u8来解决(嗯。ffmpeg直接支持将视频切成ts,同时生成m3u8文件。我这里就不写了。网上例子太多太多了)
以下内容来自:http://blog.sina.com.cn/s/blog_6cf7acdf0102v0xv.html
1. M3U8文件概念
M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。
2. M3U8文件举例
例如使用云图TV点播直播节目时,发送请求:
http://121.199.63.236:7613/m3u8/cckw1/szws.m3u8?from=bab&fun=yes&chk=y&chunk=xax&ppw=yuntutv&auth=yuntutvyuntutvyuntutv&auth=yuntutvyuntutvyuntutv&nwtime=1406515232&sign=033d5483609e6bc87987fc7d2f30a024
返回M3U8文件,文件内容如下:
XML/HTML代码
- #EXTM3U
- #EXT-X-MEDIA-SEQUENCE:140651513
- #EXT-X-TARGETDURATION:10
-
- #EXTINF:8,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651513[140651513].ts
-
- #EXTINF:9,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514[140651514].ts
-
- #EXTINF:11,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651515[140651515].ts
-
- #EXTINF:10,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651516[140651516].ts
-
- #EXTINF:12,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651517[140651517].ts
-
- #EXTINF:8,
-
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651518[140651518].ts
-
- #EXTINF:12,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651519[140651519].ts
-
- #EXTINF:8,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651520[140651520].ts
-
- #EXTINF:9,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651521[140651521].ts
-
- #EXTINF:13,
- http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651522[140651522].ts
然后根据索引的中链接请求下载音视频并进行播放
3. M3U文件标签及属性说明
M3U文件中可以包含多个tag,每个tag的功能和属性如下:
#EXTM3U
每个M3U文件第一行必须是这个tag,请标示作用
#EXT-X-MEDIA-SEQUENCE:140651513
每一个media URI 在 PlayList中只有唯一的序号,相邻之间序号+1, 一个media URI并不是必须要包含的,如果没有,默认为0
#EXTINF:,
duration 指定每个媒体段(ts)的持续时间(秒),仅对其后面的URI有效,title是下载资源的url
#EXT-X-TARGETDURATION
指定最大的媒体段时间长(秒)。所以#EXTINF中指定的时间长度必须小于或是等于这个最大值。这个tag在整个PlayList文件中只能出现一 次(在嵌套的情况下,一般有真正ts url的m3u8才会出现该tag)
#EXT-X-KEY
表示怎么对media segments进行解码。其作用范围是下次该tag出现前的所有media URI,属性为NONE 或者 AES-128。NONE表示 URI以及IV(Initialization Vector)属性必须不存在, AES-128(Advanced EncryptionStandard)表示URI必须存在,IV可以不存在。
对于AES-128的情况,keytag和URI属性共同表示了一个key文件,通过URI可以获得这个key,如果没有IV(Initialization Vector),则使用序列号作为IV进行编解码,将序列号的高位赋到16个字节的buffer中,左边补0;如果有IV,则将改值当成16个字节的16进制数。
#EXT-X-PROGRAM-DATE-TIME
将一个绝对时间或是日期和一个媒体段中的第一个sample相关联,只对下一个meida URI有效,格式如#EXT-X-PROGRAM-DATE-TIME:
For example: #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00
#EXT-X-ALLOW-CACHE
是否允许做cache,这个可以在PlayList文件中任意地方出现,并且最多出现一次,作用效果是所有的媒体段。格式如下:#EXT-X-ALLOW-CACHE:
#EXT-X-PLAYLIST-TYPE
提供关于PlayList的可变性的信息, 这个对整个PlayList文件有效,是可选的,格式如下:#EXT-X-PLAYLIST-TYPE::如果是VOD,则服务器不能改变PlayList 文件;如果是EVENT,则服务器不能改变或是删除PlayList文件中的任何部分,但是可以向该文件中增加新的一行内容。
#EXT-X-ENDLIST
表示PlayList的末尾了,它可以在PlayList中任意位置出现,但是只能出现一个,格式如下:#EXT-X-ENDLIST
#EXT-X-MEDIA
被用来在PlayList中表示相同内容的不用语种/译文的版本,比如可以通过使用3个这种tag表示3中不用语音的音频,或者用2个这个tag表示不同角度的video在PlayLists中。这个标签是独立存在的,属性包含:
URI:如果没有,则表示这个tag描述的可选择版本在主PlayList的EXT-X-STREAM-INF中存在;
TYPE:AUDIO and VIDEO;
GROUP-ID:具有相同ID的MEDIAtag,组成一组样式;
LANGUAGE:确定使用的主要语言
NAME:人类可读的语言的翻译
DEFAULT:YES或是NO,默认是No,如果是YES,则客户端会以这种选项来播放,除非用户自己进行选择。
AUTOSELECT:YES或是NO,默认是No,如果是YES,则客户端会根据当前播放环境来进行选择(用户没有根据自己偏好进行选择的前提下)。
#EXT-X-STREAM-INF
指定一个包含多媒体信息的 media URI 作为PlayList,一般做M3U8的嵌套使用,它只对紧跟后面的URI有效,格式如下:#EXT-X-STREAM-INF:有以下属性:
BANDWIDTH:带宽,必须有。
PROGRAM-ID:该值是一个十进制整数,惟一地标识一个在PlayList文件范围内的特定的描述。一个PlayList 文件中可能包含多个有相同ID的此tag。
CODECS:不是必须的。
RESOLUTION:分辨率。
AUDIO:这个值必须和AUDIO类别的“EXT-X-MEDIA”标签中“GROUP-ID”属性值相匹配。
VIDEO:同上
参考文档:
http://blog.csdn.net/jwzhangjie/article/details/9744027
http://www.xuebuyuan.com/1726264.html
--------EOF--
上述的内容中有几个标签是必须 的
1、#EXTM3U
2、#EXT-X-TARGETDURATION:10,这个好象一定要是整型。否则可能会认不出
3、#EXTINF:8, 这个数字就是下面一行视频对应的时间长度,可以是浮点型
4、#EXT-X-ENDLIST ,如果是直播这个可以不要,否则还是留着吧
本来我是用PHP+Ngx_http_mp4_module来生成的。直接将视频处理成start=? &end =?,然而看起来很美,这些数据可能会破会源文件,导致在实际播放的时候会不正常,直接就卡住,看浏览器的网络管理中会发现,文件读取失败。
所以最终没办法,只有靠ffmpeg进行文件切割。这时候就相对能看得出了。即使你约定按20秒切分,切出来的文件也是不一样的大小的,而且时长还真不能保证都一样是20s,果然 所谓的无损分割是有讲究的。这里就不深究了。
换成m3u8后,配合ngx_http_accesskey_module可以做一些简单的鉴权。防盗链吧。
总算还好。最终还算是搞定了。做个笔记
自从升到IOS正式版后,Uber就再也不能用了。为咩?原来是这货的一个BUG(也可能不是,就纯粹是为了炫耀效果也未必)
如果你的手机性能不佳,你可能关闭了那个动态效果,然而uber的这个bug就是。。。你如果关了动态效果,你就不能叫车,因此如果你发现uber其他功能正常,但就是不能叫车。
这时候你进:设置->通用->辅助功能->将减弱动态效果关闭
再退出uber重进,你能发现又可以开始叫车了。