更新荣耀1系统为CM12.1

看了教程,好长。

ROM:

源码:https://github.com/LegacyHuawei
项目:http://sourceforge.net/projects/legacyhuawei/

https://github.com/LegacyHuawei/local_manifests/wiki/Installation

Requirements

  • Latest baseband available for your device
    • U8800 – 404020 (after installing 2.3 firmware)
    • U8800PRO – 404029 (after installing 4.0 firmware)
    • U8860 – 404029 (after installing 4.0 firmware)
  • Latest LVM compatible recovery from BasketBuild
  • Strongly recommended (to make sure you have enough space on /data and /system):BlePart-LVM

 

下载好对应的ROM和LVM分区升级包

https://basketbuild.com/filedl/devs?dev=LegacyHuawei&dl=LegacyHuawei/u8860/cm-12.1/cm-12.1-20150922-UNOFFICIAL-LegacyHuawei-u8860.zip

twrp-v2860-260415-u8800pro.zip

https://basketbuild.com/filedl/devs?dev=LegacyHuawei&dl=LegacyHuawei/u8860/twrp/twrp-v2870-040815-u8860.zip

 

BlePart-LVM-11
https://basketbuild.com/filedl/devs?dev=LegacyHuawei&dl=LegacyHuawei/partitions/BlePart-LVM-11.zip

 

1) 把这3个文件放到SDCARD根目录下

2) 重新分区,参考:
http://bbs.zhiyoo.com/thread-8853633-1-1.html
http://www.miui.com/thread-897245-1-1.html

以及下面的文字:

成功给U8860分区,解决系统存储太小的问题

系统安装了miui v5,随着安装的app增多,经常报“存储不足”的错误,考虑过用外置SD卡加data2ext,但外置SD卡上有数据,不想copy,而且2G的内置SD卡也闲着,于是想着把内置SD卡弄弄,巧见上帖。

过程:
1. 手机进recovery ,貌似是recovery cwm 5.0.2.7,本人分不清跟其他的有什么区别。
似很多系统重启时,可以选择进恢复模式,没有的话,开机时长按’电源‘+’音量上‘,直到进recovery模式
2. 手机连电脑,进cmd,运行:adb shell,出现错误
exec ‘/system/bin/sh’ failed: No such file or directory
解决方式:手机上,’mounts and storage’中’mount /system’
3. 进去后按上帖的方式删除14, 13, 12分区,重建12, 13, 14分区,起止cylinder结合自己的机器。
4. 执行w,保存分区表时出错:fdisk: WARNING: rereading partition table failed device or resource busy. The kernel still uses the old table
大概是因为/system被mount了,不用管这个,这种情况下,不执行w也罢。
注意:网上查这个错误都是关于Linux的,后面通常会有一个The new table will be used at the next reboot.但我们这里没有,实际上,重启后发现partition table还是旧的,这也是我为分么还要分个14区的原因之一,以防出错,大家有兴趣可以试下不要14分区会怎么样,估计不会有问题,我不想试一是已到凌晨4点,二是手头没什么钱。
5.按帖子的方式执行格式化时,也说device or resource busy,所以我在CMD执行exit,退出adb shell,然后手机上在’mounts and storage’中’umount /system’(mount之后那一项就变成umount了),接着选下面的’format /system’, ‘format /data’, 14分区我没格式化,搞到凌晨4点,不想想节外生枝。
6. 接着就可以刷系统了,我是把刷机包放在一个8G外置SD卡中的,进行上述操作时,为了防止出问题,把它移出了。
所以,这时我需要把这个SD卡放回去,然后重启到recovery模式。
7. 双清(wipe data/factory reset,wipe cache partition,貌似只需要执行第一个,因为它会format cache分区),然后”install zip from SDcard’,然后应该没事了。

之前还一直担心成砖,最后抱着大不了再买一个的心态,比想像的要容易。

注1:之前的miui系统是备过份的,备份在我的SD卡上,在上述操作成功后,我又通过recovery的’backup and restore’功能,恢复了miui,一切正常(包括之前装的一堆应用)其实跟pc上的ghost着不多。
而且,我觉得分完区后,应该可以直接restore的,大家可以试试,大不了回头再刷个机。

 

3)刷Recovery
recovery5.5.0.4下载链接:http://pan.baidu.com/s/1pJ7Kf5x

参考 http://bbs.zhiyoo.com/forum.php?mod=viewthread&tid=9570081&page=1

4)刷TWRP的RECOVERY

刷入twrp-recovery-v2840.zip文件,然后重启recovery,完成。

5)刷入CM12专用脚本
双清,然后刷入BlePart-LVM-11.zip即可。

6)刷入CM12的rom包

(造福中国前端界)纯Js完美解决各种汉字urlencode,urldecode

纯前端Js完美解决各种汉字urlencode,urldecode,编码解码问题,不借助任何字库,内码表,轻松一行,兼容IE8+,chrome,firefox,safari等主流浏览器

最后补充一下:IE6,7用vbscript可以decode,传送门:http://www.baidu.com/s?wd=vbscript+urldecode+gbk

(昨晚更新)IE8是不支持script的src的datauri的,昨晚想了一个hack方法

MSND传送门:http://msdn.microsoft.com/en-us/library/cc848897(v=vs.85).aspx

IE8支持link的datauri,我想是否可以构造一个link过来的css,通过设置background-image,然后通过ie的currentStyle[‘backgroundImage’]取到中文

image

这里定义了一个隐藏的元素,通过datauri方式引入css,然后应用,即可以通过js获得该背景图src,测试IE8通过(2013.5.31早更新)

我们都知道javascript在做表单提交的时候,会遇到很多坑爹的 中文需要转换成gbk encode或者big5 encode的问题,

比如 中文的

javascript原生的escape只是将中文转换为unicode编码,encodeURI或者encodeURIComponent也是对于中文unicode编码的url再编码

对于“中文”这个汉字来说,他的utf-8的urlencode是%E4%B8%AD%E6%96%87,而gbk的urlencode是%D6%D0%CE%C4

而js本身没有特性支持gbk的urlencode,大部分的时候我们是通过后台(java,urlencode.encode(“中文”,”gbk”))这样来实现的

本文介绍一个借助浏览器,纯前端实现各种编码集的urlencode方式和decode方法

demo地址:http://xueduany.github.io/KitJs/urlencode.html,(这个包含了 解码,编码方法)

http://xueduany.github.io/KitJs/getEncodeStr.html(这个用来iframe回调解码后的值的文件)

image

chrome,firefox,safari测试通过,移动端均可,IE10以下下面会另说

 

(一) 编码原理

function urlencode(str, charset, callback) {
//创建form通过accept-charset做encode
var form = document.createElement(‘form’);
form.method = ‘get’;
form.style.display = ‘none’;
form.acceptCharset = charset;
var input = document.createElement(‘input’);
input.type = ‘hidden’;
input.name = ‘str’;
input.value = str;
form.appendChild(input);
form.target = ‘_urlEncode_iframe_’;
document.body.appendChild(form);
//隐藏iframe截获提交的字符串
if (!window[‘_urlEncode_iframe_’]) {
var iframe = document.createElement(‘iframe’);
//iframe.name = ‘_urlEncode_iframe_’;
iframe.setAttribute(‘name’, ‘_urlEncode_iframe_’);
iframe.style.display = ‘none’;
iframe.width = “0”;
iframe.height = “0”;
iframe.scrolling = “no”;
iframe.allowtransparency = “true”;
iframe.frameborder = “0”;
iframe.src = ‘about:blank’;
document.body.appendChild(iframe);
}
//
window._urlEncode_iframe_callback = callback;
//设置回调编码页面的地址,这里需要用户修改
form.action = ‘getEncodeStr.html’;
form.submit();
setTimeout(function() {
form.parentNode.removeChild(form);
iframe.parentNode.removeChild(iframe);
}, 500)

}

通过HTML元素form自带属性accept-charset在表单提交发送数据时候,浏览器会根据这个属性值做自动urlencode,get/post方式均可

accept-charset 属性规定服务器处理表单数据所接受的字符集。

accept-charset 属性允许您指定一系列字符集,服务器必须支持这些字符集,从而得以正确解释表单中的数据。

该属性的值是用引号包含字符集名称列表。如果可接受字符集与用户所使用的字符即不相匹配的话,浏览器可以选择忽略表单或是将该表单区别对待。

浏览器支持

除了 Internet Explorer,accept-charset 属性得到几乎所有浏览器的支持。

注释:accept-charset 属性无法在 Internet Explorer 中正确地工作。如果 accept-charset 属性设置为 “ISO-8859-1″,IE 将发送以 “Windows-1252” 编码的数据。

语法

从例子的代码,我们巧妙的利用了这个属性,构造一个接受gbk encode之后url的页面,通过location.search获取到encode之后的编码,再传递给原页面,即可实现对于任意字符的任意编码urlencode

 

(二)解码

上面说了编码,现在说说 如果我们获得一串%D6%D0%CE%C4,而且我们知道这个是gbk编码的,那么我们如何得到这个编码的中文呢?

function urldecode(str, charset, callback) {
window._urlDecodeFn_ = callback;
var script = document.createElement(‘script’);
script.id = ‘_urlDecodeFn_’;
var src = ‘data:text/javascript;charset=’ + charset + ‘,_urlDecodeFn_(“‘ + str + ‘”);’
src += ‘document.getElementById(“_urlDecodeFn_”).parentNode.removeChild(document.getElementById(“_urlDecodeFn_”));’;
script.src = src;
document.body.appendChild(script);
}

这个问题的核心在于编码是urlencdoe的,那么除了utf-8格式的我们可以借助js自己的decodeURI等之后,对于gbk的,我们一般是无能为力的

这里巧妙构造了一个URI资源,因为通过URI方式引入的script,可以指定字符编码的,而浏览器会根据指定的字符编码,做urldecode,这样就实现了我们想要的urldecode效果

(三)IE

最后,我们来看看比较郁闷的IE,对于IE来说,他完全不认我们的form的accept-charset属性,他们的表单提交的编码格式,是按照页面的meta制定的字符集来的,当然了,他也给广大屌丝前端留了一条后路,就是他们的document.charset属性,是可读可写的,

而且IE为了表现它确实是一傻到底,不但在设置document.charset的时候不会用新的编码解释页面,还会在前进后退(我特地用#作为action来实现后退)的时候又尝试用新的编码去解释页面。

所以我们需要hook之前的编码,在解码后再转换回来

function urlencode(str, charset, callback) {
//创建form通过accept-charset做encode
var form = document.createElement(‘form’);
form.method = ‘get’;
form.style.display = ‘none’;
form.acceptCharset = charset;
if (document.all) {
//如果是IE那么就调用document.charset方法
window.oldCharset = document.charset;
document.charset = charset;
}
var input = document.createElement(‘input’);
input.type = ‘hidden’;
input.name = ‘str’;
input.value = str;
form.appendChild(input);
form.target = ‘_urlEncode_iframe_’;
document.body.appendChild(form);
//隐藏iframe截获提交的字符串
if (!window[‘_urlEncode_iframe_’]) {
var iframe = document.createElement(‘iframe’);
//iframe.name = ‘_urlEncode_iframe_’;
iframe.setAttribute(‘name’, ‘_urlEncode_iframe_’);
iframe.style.display = ‘none’;
iframe.width = “0”;
iframe.height = “0”;
iframe.scrolling = “no”;
iframe.allowtransparency = “true”;
iframe.frameborder = “0”;
iframe.src = ‘about:blank’;
document.body.appendChild(iframe);
}
//
window._urlEncode_iframe_callback = function(str) {
callback(str);
if (document.all) {
document.charset = window.oldCharset;
}
}
//设置回调编码页面的地址,这里需要用户修改
form.action = ‘getEncodeStr.html’;
form.submit();
setTimeout(function() {
form.parentNode.removeChild(form);
iframe.parentNode.removeChild(iframe);
}, 500)

}
function urldecode(str, charset, callback) {
var script = document.createElement(‘script’);
script.id = ‘_urlDecodeFn_’;
window._urlDecodeFn_ = callback;
if (document.all) {
//隐藏iframe截获提交的字符串
if (!window[‘_urlDecode_iframe_’]) {
var iframe = document.createElement(‘iframe’);
//iframe.name = ‘_urlDecode_iframe_’;
iframe.setAttribute(‘name’, ‘_urlDecode_iframe_’);
iframe.style.display = ‘none’;
iframe.width = “0”;
iframe.height = “0”;
iframe.scrolling = “no”;
iframe.allowtransparency = “true”;
iframe.frameborder = “0”;
iframe.src = ‘about:blank’;
document.body.appendChild(iframe);
}
//ie下需要指明charset,然后src=datauri才可以
iframe.contentWindow.document.write(‘<html><scrip’ + ‘t charset=”gbk” src=”data:text/javascript;charset=gbk,parent._decodeStr_=\” + str + ‘\'”></s’+’cript></html>’);
setTimeout(function() {
callback(_decodeStr_);
iframe.parentNode.removeChild(iframe);
}, 300)
} else {
var src = ‘data:text/javascript;charset=’ + charset + ‘,_urlDecodeFn_(“‘ + str + ‘”);’;
src += ‘document.getElementById(“_urlDecodeFn_”).parentNode.removeChild(document.getElementById(“_urlDecodeFn_”));’;
script.src = src;
document.body.appendChild(script);
}
}

关键点在于,编码时

image

解码时的关键在与,对于支持datauri版本的ie,不仅仅在于datauri里面制定编码集,还在在script的charset上指定编码

image

这样就可以实现浏览器的完美兼容

(四)小结

再次感谢腾讯前端QQ群的各位,没有你们的建议和支持,不会想到这么好的解决方案,再次感谢大家,希望看到的广大的前端屌丝们大力扩散,早日每一个jser都知道这一特大喜讯!!!哈哈哈哈哈

程序源代码地址:

https://github.com/xueduany/KitJs/blob/gh-pages/urlencode.html

https://github.com/xueduany/KitJs/blob/gh-pages/getEncodeStr.html

编译openssl

一、编译OpenSSL

在编译OpenSSL前,需要正确安装Perl,因为在编译OpenSSL时需要使用到该程序

下载最新版本的Perl:http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.zip。然后安装之。

下载最新版本的OpenSSL:http://www.openssl.org/source/openssl-0.9.8g.tar.gz

然后将源码释放的c:\openssl-0.9.8g目录中。

首先将VS2008的nmake的环境变量加入的cmd中:

在cmd中执行 *:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat
进入openssl源码目录。
cd c:\openssl-0.9.8.g

运行configure:
perl Configure VC-WIN32 no-asm

[注:新的openssl用微软的asm编译会出错]
http://bbs.csdn.net/topics/390986380

创建Makefile文件:
ms\do_ms

编译动态库:
nmake -f ms\ntdll.mak
编译静态库:
nmake -f ms\nt.mak

测试动态库:
nmake -f ms\ntdll.mak test
测试静态库:
nmake -f ms\nt.mak test

安装动态库:
nmake -f ms\ntdll.mak install
安装静态库:
nmake -f ms\nt.mak install

清除上次动态库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\nt.mak clean

[转] ffmpeg+sdl2.0编写最简单的视频播放器

花了好几天的时间,终于把这东东搞出来了

sdl2相比sdl1,api有了比较大的变化,尤其是绘图方面

网上基本上找不到用sdl2编写的,只好自己不断探索尝试

ffmpeg和sdl都可以直接去官网下载,现在已经有编译好的vc库文件下载,怎么配置网上有很多,这里就不多说了

推荐几个sdl2的教程:

http://adolfans.github.io/sdltutorialcn/blog/2013/01/25/sdl-2-dot-0-tutorial-index/

http://www.sdltutorials.com/tutorials

ffmpeg的api文档可以在这里看:

http://ffmpeg.org/doxygen/2.0/index.html

需要注意的一点是,建立工程的时候最好选择 控制台应用程序,加上预编译头文件,即有stdafx.h头文件的那种

再推荐一个学习的博客,我的代码就是参考他的写出来的

http://blog.csdn.net/leixiaohua1020/article/details/8652605

还有一个很好的教程,虽然有点过时,但是基本思想是不变的,很值得参考

如何用FFmpeg编写一个简单播放器

最后你需要了解一下像素格式,可以参考:

图文详解YUV格式

在sdl的头文件SDL_Pixel.h中有各种像素格式的声明

其他不多说了,直接上代码