APK相关工具
昨天搞的时候很混乱,今天整理了一下,搞了个图: 具体可以参见wiki: APK (de)compile 大致上有很多办法可以改一个apk,总的来说有两个办法,一个是搞成 Dalvik VM 的汇编,然后改。一个是先从 Dalvik VM 的字节码搞成 JVM 的字节码,然后搞成 JVM 的汇编,甚至搞成 Java source code,然后改。改完了再倒回去,重新签名就是新apk了…… 另,Dia 真好用……
昨天搞的时候很混乱,今天整理了一下,搞了个图: 具体可以参见wiki: APK (de)compile 大致上有很多办法可以改一个apk,总的来说有两个办法,一个是搞成 Dalvik VM 的汇编,然后改。一个是先从 Dalvik VM 的字节码搞成 JVM 的字节码,然后搞成 JVM 的汇编,甚至搞成 Java source code,然后改。改完了再倒回去,重新签名就是新apk了…… 另,Dia 真好用……
各位新年好! 虽说我这儿还没到1月23号,但是新年还是以国内时间为准吧~
Android到了3.0+有个地方特别弱智,就是USB连上显示出来不是U盘设备,而是个MTP设备…… 其他系统的MTP问题 首先这个MTP一开始就是Microsoft自己搞出来的东西,主要是Windows Media Player支持这个东西,日后才被USB那啥论坛搞成一种正式的USB类。应该是因为这个,别的系统下的支持都不怎么样。 别的系统基本上都用了libmtp库,而这个库最弱智的地方,就是刚连上的时候,会扫描所有文件做个索引…… 如果只是个音乐播放器可能还好,文件不多,但是现在是一个Android设备,那里边乱七八糟的可多了…… 于是这个索引要做个4,5分钟。想想你插上一个设备,过个四五分钟才能显示内容,那不是很sx么…… Windows下,MTP文件连上后,过一会就可以看见内容了…… 读了代码,发现他是自己递归做索引的,而且好多接口函数都会去确保这个索引存在,不在就建出来…… 根据MTP的规范,其实每次请求一个目录也就列出它的子文件和子目录。也就是说,按照规范来说,并没有啥一定要一次性拿到所有文件的必要性。看windows那边的实现也可以说明这一点。或许本来它是考虑搞个缓存提高之后速度,但是这个初次访问速度实在不能忍。而且之后访问慢慢建出来索引也可以,没必要非要一开是就建出全部的索引。 但是USB的传输速度又比较快。理论上wifi也很快,但是我拿scp也好ftp也好adb也好,速度都最多1M多,还不清楚哪儿sx了…… 所以还是要想办法搞定这个事情,难道要重写libmtp么…… Win下的MTP问题 于是我想别的系统MTP支持糟糕,Win总该不错吧?于是打开WinXP虚拟机,嘿,这个MTP还没有驱动…… 上网查,说要装WMP10,装完还是不行。再查,说可以装WMP11,装完还是不行。再查,说有个MTP Porting Kit的东西,里面有驱动。下下来装好,里里外外翻了一遍,还是没有驱动…… 后来从WMP11的wmfdist11.exe,也就是Window Media Format 11 Runtime那一部分里,翻出来若干inf以及相关文件,貌似是MTP驱动。但是手动指定到这儿,倒好像装上去了,但还是不行…… 到此基本没法,上网继续查。在查了好久之后,终于有个地方说可能和USB debugging有关系。遂关掉USB debugging,立马就好了…… 自动装好驱动,啥都能访问。一开,又不成…… 继续观察,发现不开的时候,只有一个设备,VID_22B8&PID_70A8。这个设备的兼容类型里包括了USB\MS_COMP_MTP,所以驱动匹配上了。开了之后,这个设备变成了一个复合设备,VID_22B8&PID_70A9,很神奇的就是PID加了一,估计是为了和原来的区别开来。这个东西下有俩子设备,VID_22B8&PID_70A9&MI_00和VID_22B8&PID_70A9&MI_01。后一个在装了Moto的驱动之后,显示出来是个ADB设备,也就是USB debugging用的…… 前一个名称是MTP,估计就是MTP设备,但是兼容类型里没有USB\MS_COMP_MTP!于是驱动挂不上…… 就弱智了…… 解决方法其实很简单,只要改windows\inf下的wpdmtp.inf,在匹配段里面,在 %GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP 之后,加上 %GenericMTP.DeviceDesc%=MTP, USB\VID_22B8&PID_70A9&MI_00 ,一切都搞定了…… 于是我很难理解,到底是哪里脑残了导致开了USB debugging就不说自己是MTP设备了…… 蛋疼啊…… 为啥Google要用MTP…… 虽说Google那边说MTP有诸多好处,例如提高了抽象层次,使得一个文件对Android和电脑都可见啦之类(老的方式系统看见了一大块数据,里面有几个分区,所以如果允许两边都看见,那只要有改动,就会导致元数据不一致…… 新的方法等于系统看见了一堆抽象的文件和目录等,所以所有操作都要告诉那边才能做…… Android那边维持着一致性……),但是选MTP这个标准真是蛋疼,你大不了Google自己搞一套+开源实现也不难啊!MTP就不是给你做任意类型文件传输的么!
Happy New Year!
今天成果有两个:国家艺术博物馆,和国家航空航天博物馆。 由于昨晚太晚。。。 十二点才出门。 本来想先去航空航天博物馆,路过艺术博物馆就打算先进去看看。 里面有各国各个时期的艺术品,大多数是画作,也有不少雕塑作品。 作为四个工科男。。。 其实大家都缺乏艺术细胞。。。 不过好多展品还是很漂亮的,有些一看上去就很有感觉。。。 看到了毕加索,莫奈等人的画作,想起了美术教科书里的那些画。。。 现在是不是比那个时候有更好的理解了呢。。。 有些写实画比照相机更有现场感。。。 甚至于都能有立体感。 抽象的倒是不多,多数都是写实,好多人物画,以及风景画。以天主教相关内容为题材的很多。 在那里还和郑泽宇同学碰了面,挺和善的一人,好象很好交流。他在cmu读书,好象也是第一年。 之后按原计划去了航空航天博物馆。 先逛了航空部分。有好多个展馆,我们也没按啥次序,随便逛。 各个地方都放着实际飞机一样的模型,各个时代的都有。天上也吊了很多。 有一个是舰载机展厅,装饰得像航母一样。里面有讲飞机起飞着陆过程,塔台控制,飞行员训练等。 也有讲飞机引擎的,各种样子的引擎,v型,星型,等等。另一个馆讲了喷气式飞机的引擎,看上去就是好多片叶片,每片由好多小叶片构成,越来越松。。。 有把实物引擎剖开来给你看的模型,看得很爽。 随后逛了航天馆。有好多缩小火箭模型立在地上,也有真实大小的v2在地上立着。还有登月仓模型,各种人造卫星模型等。 观察了模型的感想是,宇航员还真挤。。。 那么小一个空间。。。 也有介绍太阳系基础知识的部分,话说已经都更新八大行星了。。。 有个地方是展示空间站内部的,居然在展柜里发现了扔进去的某某功的宣传资料。。。 怎么弄进去的。。。 还有个展厅专门介绍空间站,还有个多人参与的知识问答。。。 我们上去乱答一通,居然我还是答对最多的。。。 本来我们打算去玩玩模拟器,结果过去一看,7刀,于是人们都纷纷放弃了这个念头。。。 有个展厅介绍各种基本物理学知识,例如升力产生原因,气压差,空气阻力等。里面有好多可交互的展台,同学们都玩得很开心。 晚饭和郑泽宇同学一起在唐人街中餐馆吃的,还不错。在这里吃了两顿麦当劳终于吃了正常的。。。 夜里依旧是有人dota有人动画…… 本来说要早睡,但是由于一直没打赢电脑,结果又搞到了夜里三四点……