前两天在miui网站上看到了micode网站,是一个开源的组织,去看了一下,有3个应用程序,还有2.3和4.0的源代码,随即下载了2.3的下来,打算尝试移植的,代码是托管在github上的,如和下载等就不说了,园子里很多文章有介绍。
以下操作都基于ubuntu11.10.
patchrom下载下来解压,得到的是这样一个目录,

关于目录结构,micode上有说明,这里就不再叙述了。
下面来编译i9100的源代码。
现在patchrom目录下执行
. build/envsetup.sh
然后切换到i9100目录下,执行
make apktool-if
make zipfile
执行完毕后就会在.build目录下生成MIUI_i9100.zip,这就是刷机包。

特别注意,make apktool-if不能省略,否则会出现
Exception in thread "main" brut.androlib.err.CantFindFrameworkResException
at brut.androlib.res.AndrolibResources.getFrameworkApk(AndrolibResources.java:366)
at brut.androlib.Androlib.parseUsesFramework(Androlib.java:400)
at brut.androlib.Androlib.buildResourcesFull(Androlib.java:301)
at brut.androlib.Androlib.buildResources(Androlib.java:248)
at brut.androlib.Androlib.build(Androlib.java:171)
at brut.androlib.Androlib.build(Androlib.java:154)
at brut.apktool.Main.cmdBuild(Main.java:182)
at brut.apktool.Main.main(Main.java:67)
make: *** [.build/Phone.apk] Error 1
测试看看。。。
2月2号到现任公司报道,一直到现在,这阶段接收了一个java applet的项目,我需要做的就是加入对https的支持。做其实很简单,直接调用JSSE就可以了。一直到今天才能算基本完成,有些人可能不明白,既然已经有了api供你调用,应该来说不需要花这么长的时间啊。这可能就是研发部门和一般接其他单子的公司的区别了吧。
现任的主管,不关心你是如何实现的,而是关心,你是否真正理解这种协议。就拿https来说,主要就是ssl协议。你是否真正的懂得ssl协议,按主管的话说,你做一种技术,就要精通这门技术所使用的protocol,想想的确是这样,按照以前的方式,google到了可以使用jsse来添加对https的支持,那么基本就直接会接着去搜索jsse如何使用,然后运用到自己的项目里。但是就这样的话,最多也就只是提高了一点搜索的能力,其他的,没学到什么。而主管需要的,就是我去学ssl去分析ssl。要了解ssl的流程等等。。。这么多天的学习下来,不说我对ssl多么的精通,起码,你问一些有关ssl的问题,我还是能回答上来的。
这里就写一下有关ssl的一些知识。以便以后查看。
ssl为网络通信提供安全及数据完整性的一种安全协议。 Ssl层是在tcp和http层之间。Ssl协议分两部分:Handshake Protocol和Record Protocol。Handshake Protocol是用来协商密钥,而Record Protocol用来定义传输的格式。
这里关于ssl加密算法就不多解释了,水平不够,解释不清楚。
接下来我们看一下ssl的流程。(这里引用51cto的图来说明)

SSL握手协议的具体工作过程描述如下。
① 客户(client)端发送ClientHello信息给服务器(Server)端,Server回答ServerHello。这个过程建立的安全参数包括协议版本、“会话”标识、加密算法、压缩方法。另外,还交换两个随机数:ClientHello.Random1和ServerHello.Random,用于计算“会话主密钥”。
② Hello消息发送完后,Server端会发送它的证书和密钥交换信息。如果Server端被认证,它就会请求Client端的证书,在验证以后,Server就发送HelloDone消息,以示达成了握手协议,即双方握手接通。
③ Server请求Client证书时,Client要返回证书或返回没有证书的指示,这种情况用于单向认证,即客户端不装有证书。然后,Client发送密钥交换消息。
④ 服务器Server此时要回答“握手完成”消息(Finished),以示完整的握手消息交换已经全部完成。
⑤ 握手协议完成后,Client端即可与Server端传输应用加密数据,应用数据加密一般是用第②步密钥协商时确定的对称加/解密密钥
注1.在实际的抓包过程中,没有发现这个random值。不知何故。
具体看两个截图。


SSL部分到这里基本就结束了,但是在实际编程过程中,还遇到了一个比较讨厌的问题,就是证书的验证,起先是空实现了一个X509TrustManager接口,这样能访问,但是问题是安全性不够,空实现是信任所有证书的,并没有对证书进行认真,这个就和http方式没什么区别了。无奈只好继续学习并google,网络上大部分的确抄袭的比较厉害啊,看了很多文章都是一样的,并没有获取到什么有用的信息。几天google下来,就看到一篇写X509TrustManager如何具体实现的,随即我也尝试了一下,但是由于我不知道所需连接的camera的证书的具体信息,这个方法也就没法使用。继续google,一天在看iteye的一篇文章的时候,看到一句话,意思大体是将一家银行提供的root.cer导入到jre里的cacerts中。原来如此。马上把网页中copy出来的证书导入到cacerts中,ok,成功了。下面的就是一些细节的修正,不提了。
随后好好研究了cacerts文件,发现它对于ssl来说,是很重要的一个文件。关于这个文件,有这些描述。
JSSE中,有一个信任管理器类负责决定是否信任远端的证书,这个类有如下的处理规则:
⑴ 果系统属性javax.net.sll.trustStore指定了TrustStore文件,那么信任管理器就去jre安装路径下的lib/security/目录中寻找并使用这个文件来检查证书。
⑵ 果该系统属性没有指定TrustStore文件,它就会去jre安装路径下寻找默认的TrustStore文件,这个文件的相对路径为:lib/security/jssecacerts。
⑶ 如果 jssecacerts不存在,但是cacerts存在(它随J2SDK一起发行,含有数量有限的可信任的基本证书),那么这个默认的TrustStore文件就是cacerts
Ok,代码的编写基本完成了,eclipse中也可以连接上camera了,嵌入到网页中运行,出错,access denied,这个是applet的安全限制。这里就不多讨论了,直接Google就可以找到很多文章。对jar签名解决问题。测试ok,完成,等待下午的demo时间。
洋洋洒洒写了不少字,自我感觉来到这家公司是我人生路上比较好的一个可以说转折点吧。之前的外出培训可以说算是一个。这个一定算,因为在这里,我知道,我要做什么东西,我就要去学习他的protocol,我就要成为他的专家。好的,努力奋斗。
本公司(深圳学林电子有限公司WWW.51C51.COM 51测试网)和无线电杂志合作开展赠送MINI51单片机学习板套件活动,详情请看无线电杂志的2011年第9期.
首批抽奖赠送的50套散件已经于2011年12月1日由中国邮政快递包裹发出。
为活跃论坛,我们再次拿出100套mini51散件赠送给本论坛会员:
1 费用为0所有的配件以及运费等等全部由我公司赞助。
2 将本贴转到5个以上的电子,编程,diy,音响,机器人,单片机,大学社区,论坛,以扩大本活动的影响。(可以通过baidu搜索 注册,1小时左右即可以搞定。 转贴的时候最好带上一个图片,如达不到要求视为弃权),然后将您发贴的截屏图片连同您的详细地址,电话,qq,一起打包发送到sxj1974@163.com 如果您中奖我们将和您联系。
3 申请成功者需协助管理员管理论坛,在本论坛认真回复新手贴子,参与讨论,转载高人气资料到本论坛。至少在一个月内不低于10次登陆本论坛,每次发贴(转帖)或者回贴不低于5篇。(申请者要足够时间上网并有足够热情在本论坛讨论,如果申请后一周内未再次在本论坛登陆讨论的,本站将取消获奖资格)
4 每天只限于1个申请,同一个地市地址,同一个id只限1套,收到邮件以当天中午1点时间为准,即中午1点0分0秒为最先,(包含有宣传截屏附件以及地址)。如果当天没有人申请则自动顺延,如果当天只有1人申请,申请成功率100% 每个宣传截屏附件包只能用一次。如果您当天没有申请到可以第二天重新注册用户名, 重新发新的宣传截屏附件(不能用上次的)。只要您有耐心,100%可以申请成功!
http://www.51c51.com/bbs/thread-124796-1-1.html
帖子具体地址,没有学习班的可以去申请一个
费用为0所有的配件以及运费等等全部由51c51赞助。
申请成功者需协助管理员管理论坛,在本论坛认真回复新手贴子,参与讨论,转载高人气资料到本论坛。至少在一个月内不低于10次登陆本论坛,每次发贴(转帖)或者回贴不低于5篇。(申请者要足够时间上网并有足够热情在本论坛讨论,如果申请后一周内未再次在本论坛登陆讨论的,本站将取消获奖资格)
每天只限于1个申请,同一个地市地址,同一个id只限1套,收到邮件以当天中午1点时间为准,即中午1点0分0秒为最先,(包含有宣传截屏附件以及地址)。如果当天没有人申请则自动顺延,如果当天只有1人申请,申请成功率100% 每个宣传截屏附件包只能用一次。如果您当天没有申请到可以第二天重新注册用户名, 重新发新的宣传截屏附件(不能用上次的)。只要您有耐心,100%可以申请成功!
时间一转眼就过去了,培训也将近尾声,今天迎来了人生的第一次面试的笔试,起先本以为是java和android混合,就抓紧看java基础,等卷子下来一看,傻眼了,完全是android的,悲剧啊。。。。
记录了一下笔试的内容,大家一起看看吧。
现实20个单选题,涉及到LogCat,Activity的生命周期,Intent和Intentfilter,BroadcastReceiver,Service,android目录结构下的assets目录,res下的raw目录,还有一题是ContentValues。选择题就不多说了,下面是简答题。
第一题,简述android常用的四个布局和其特点。
自己答的时候,写了线性布局,标签布局,表格布局,相对布局。
其特点也是结合项目来阐述的。这里推荐一篇文章,阐述的比较好。
http://www.cnblogs.com/skynet/archive/2010/06/06/1752616.html
第二题,sqlite数据库操作,建表,增删改。这里要求写sql语句,不多说了。
第二小题是查询,题目没有明确要求,就用了sql语句和SQLiteDatabase下的query函数。
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
第三题,写Handler的操作。
Handler主要是用于子线程来更新UI线程的操作。还有其他三种方法,这里主要讲Handler的操作
创建一个Handler的子类,继承Handler并且复写handleMessage方法,并且在这个方法里去操作控件。
class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
// 对控件进行操作
}
}
在子线程中,实例化Message对象,实例化MyHandler,调用sendMessage方法。
Message msg = Message.obtain();
msg.obj = str;//将要更新的msg
Handler myHandler = new MyHandler();
myHandler.sendMessage(msg);
以上是我的答案。
第四题,android中的Http请求的接口和其作用。
这一题算是简单的,并且我们项目里很大程度都是用到。但是,实际作用真的不好说。
我们用到就3个接口。
HttpPost/HttpGet:将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
HttpClient:使execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。
HttpResponse:.通过接口的getEntity方法返回响应信息,并进行相应的处理。
我的回答就是这样。
第五题,Activity被回收,如何保存回收前的状态。
当某一个Activity A运行时,另一个Activity B运行,这时候,A会执行onSaveInstanceState()方法,B完成后找A,这是调用A的onCreate方法,此时,是带onSaveInstanceState参数的。这样就完成了。
第六题,关于android动画,这一块完全没涉及到,空白。。。。
好了,今天的笔试就是这样,明天面试。。。紧张。。。
欢迎关注我的博客:jcyfkimi.tk