https://gist.github.com/forthxu/f42113205494abd54453 #!/bin/bash #@author forthxu.com #说明 #找到获取apk信息有两种方式 #一种解压后读取AndroidManifest.xml,解压最好不要通过unzip因为获取的是压缩过的内容，读取不准确，可用apktool反编译解压 #另外一种可通过aapt也就是官方sdk中提供的工具读取信息 #aapt和apktoool工具 https://code.google.com/p/android-apktool #可能存在的问题 http://www.qiansw.com/centos-apk-apktool.html #扩展阅读，汉化apk http://bbs.dospy.com/thread-9991523-1-354-1.html #如果使用unzip解压的方法还可以通过以下方法解析XMl文件 #java可用 java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest2.xml #AXMLPrinter2.jar下载 https://code.google.com/p/android4me/ #AXMLPrinter2 php版http://blog.katcin.com/archives/69 #获取apk if [ ! -s "${1}" ];then echo "usage:bash ${0} some.apk"; exit; fi #获取文件后存储的位置 ex=./ex/; echo "-----apk信息----"; #apk信息 badging=`aapt d badging $1`; # echo $badging; echo "-----apk icon----"; #获取apk icon icons=`aapt d badging $1 | grep -E "application-icon|application:" | sed -e 's/.*\(res\/\w\{1,\}\-\w\{1,\}\/\w\{1,\}\.png\).*/\1/' | uniq`; # echo $icons; for icon in $icons;do echo $icon; done echo "-----解压图标 到 ${ex}----"; #解压图标 unzip -o $1 $icons -d $ex echo "-----apk name----"; #获取apk name name=`aapt d badging $1 | grep -E "application:" | sed -e "s/.*label='\(\w*\)'.*/\1/"`; echo $name; echo "-----apk 权限----"; #获取apk 权限 permissions=`aapt d permissions $1 | awk -F " " '/uses-permission/ {print $2}'`; # echo $permissions; for permission in $permissions;do echo $permission; done echo "-----apk sdkVersion----"; #获取apk sdkVersion sdkVersion=`aapt d badging $1 | grep -E "sdkVersion:" | sed -e "s/.*:'\(\w\{1,\}\)'.*/\1/"`; echo $sdkVersion; echo "-----apk targetSdkVersion----"; #获取apk targetSdkVersion targetSdkVersion=`aapt d badging $1 | grep -E "targetSdkVersion:" | sed -e "s/.*:'\(\w\{1,\}\)'.*/\1/"`; echo $targetSdkVersion; echo "-----apk versionCode----"; #获取apk versionCode versionCode=`aapt d badging $1 | grep -E "package:" | sed -e "s/.*versionCode='\(\w\{1,\}\)'.*/\1/"`; echo $versionCode; echo "-----apk versionName----"; #获取apk versionName versionName=`aapt d badging $1 | grep -E "package:" | sed -e "s/.*versionName='\(\S\{1,\}\)'.*/\1/"`; echo $versionName; echo "-----apk package----"; #获取apk package package=`aapt d badging $1 | grep -E "package:" | sed -e "s/.*name='\(\S\{1,\}\)'.*/\1/"`; echo $package; echo "-----apk supports-screens----"; #获取apk supports-screens supports=`aapt d badging $1 | grep -E "supports-screens:" | sed -e "s/.*supports-screens:\(.\{1,\}\)/\1/"`; echo $supports; echo "-----解压证书 到 ${ex}----"; #解压证书 unzip -o $1 META-INF/CERT.RSA -d $ex
说实话，虽然似乎为之奋斗了十多年，在真正进入软件行业的短短一年之后，我已经对它感到相当的厌倦了。这并不是说这个行业没有前景，而是在这个行业工作，其实很难得到心理上的快乐。 人们说女怕嫁错郎，男怕入错行。我并不认为自己入错了行，我仍然很喜欢设计程序和语言，而且我显然是这个领域的王牌之一。然而我却看到了这个行业里的无限混沌，让我觉得喘不过气来。几十年的垃圾设计堆积在那里，却没有人试图把它们清理掉，权威主义盛行。无论你在哪个公司，哪个地方，只要跟程序员说话，十有八九会谈不来。非常扫兴不说，甚至感觉很伤自尊。 久而久之我发现了，由于程序员工作的性质，他们受到的“熏陶”，形成了一种行业性的心理疾病。这里我就简单的把我所观察到的一些症状总结一下。 > 只是备份 > 原文 http://www.yinwang.org/blog-cn/2014/02/09/programmer-mental/ > 关于王垠 http://www.kurttlin.com/post/2011-10-03/5502426 > 这些都是程序员的病 无自知之明 由于程序员的工作最近几年比较容易找，工资还不错，所以很多程序员往往只看到自己的肚脐眼，看不到自己在整个社会里的位置其实并不是那么的关键和重要。很多程序员除了自己会的那点东西，几乎对其它领域和事情完全不感兴趣，看不起其他人。这就是为什么我的前同事 TJ 作为一个资深的天体物理学家，在一个软件公司里面那么卑微。貌似会写点 node.js，iOS 软件的人都可以对他趾高气昂的样子，而其实这些东西的价值哪里可能跟 TJ 知道的物理知识相提并论。让人感觉是在阴沟里翻了船被老鼠欺负。 如果力学工程师犯了错误，飞机会坠毁；如果结构工程师犯了错误，大桥会垮塌；可是如果软件工程师犯了错误，大不了网站挂掉一小时，重启一下貌似又好了。所以所谓“软件工程师”，由于门槛太低，他们的工作严谨程度，其实是根本没法和力学工程，结构工程等真正的工程师相提并论的。实际上“软件工程”这个名词根本就是扯淡的，软件工程师也根本不能被叫做“工程师”。跟其他的工程不一样，软件工程并不是建立在科学的基础上的，计算机科学也根本不是科学。按照 Dijkstra 的说法，“软件工程”是穷途末路的领域，因为它的目标是：如果我不会写程序的话，怎么样才能写出程序？ 为了达到这个愚蠢的目的，很多人开始兜售各种像减肥药一样的东西。面向对象方法，软件“重用”，设计模式，关系式数据库，NoSQL，大数据…… 没完没了。只要是有钱人发布的东西，神马垃圾都能被吹捧上天。Facebook 给 PHP 做了个编译器，可以编译成 C++，还做了个 VM，多么了不起啊！ 其实软件里面有少数永恒的珍宝，可惜很少有人理解和尊重它们的价值。这在其它的工程领域看来是不可思议的，然而这却是事实。 垃圾当宝贝 由于没有科学作为理论的基础，没有实验作为检验它们的标准，软件行业的很多东西就像现代艺术一样，丑陋无比的垃圾还能摆在外表堂皇的“现代艺术博物馆”里面，被人当成传世大作一样膜拜。 为了凸显自己根本不存在的价值，又提出一些新的“理念”，就像有些现代艺术家一样，说“艺术的目的不是为了美，而是为了自由。”哦，这就是为什么你们可以自由地把那些让人反胃的东西放在博物馆里，还要买门票才能参观？ 宗教斗争 当然了因为没有实质的技术，为了争夺市场和利益，各种软件的理念就开始互相倾轧。一会儿说软件危机啦，面向对象方法来拯救你们！一会儿又提出设计模式。过了一会儿又有人说这些设计模式里面有些模式是“反模式”，然后又有人把函数式编程包装起来，说是面向对象编程的克星，一会儿是关系式数据库，一会儿是 NoSQL，一会儿是 web，一会儿是 cloud，一会儿又是 mobile…… 每个东西都喜欢把自己说成是未来的希望。 这就是为什么有人说在软件行业里需要不停地“学习”，因为不断地有人为了制造新的理念而制造新的理念。在这样一个行业里，你会很难找到一个只把程序语言或者技术当成是工具的人。如果有人问你对某个语言或者技术的评价，是非常尴尬甚至危险的事情，所以最可靠的办法就是不做评论，什么都不要说。 引难为豪 在 IT 行业里批评一个技术难用，是一件非常容易伤自尊的事情，因为立马会有人噼里啪啦打出一大篇代码，说：就是这么简单！然后你就发现，这些人完全不明白什么叫做设计，他们以自己能用最快的速度绕过各种前人的设计失误为豪，很多程序员甚至以自己打字快为豪。 当遇到这样的人，我的经验是，千万不要恭维他们。你必须大声地嘲笑他们是 code monkey，否则你不但助长了他们的气焰，而且将来自己的自尊也难保了。 去读文档！ 不知从什么时候开始，人们开始引用 Eric Raymond 的一篇叫做《提问的艺术》的文章，这篇文章后来就成为了对提问者没礼貌的借口。由于这篇文章的误导，当你希望同事能给你一个手把手的演示的时候，他们往往会丢给你一篇不知道什么时候写的文档，让你自己去读，仿佛文档就可以代替人之间的直接互动。况且不说这文档可能已经过时，里面有很多地方已经不符合最新的设计，而这意味着在潜意识里，他们觉得高你一等。他们甚至会对你说，如果每个新人来了我们都花这么多时间去指导他们入门，哪里还有时间干正事呢？然后你就意识到了，你在他们心里的地位，其实是如此的卑微和低下。 有的人稍微委婉一点，当你提问的时候，他们会二话不说打开一个浏览器窗口，在里面用 Google 搜索，然后指给你：看，就是这样。貌似比较礼貌，但那其实意味着他们在教训你：Google 一下就找到了的，自己不动脑筋！有谁不会用 Google 呢？提问的人恐怕是想得到 Google 不能给他的答案。真正有礼貌的人在不知道答案的时候是不会当面去帮你搜索的，他会对你说：“这个我也不知道…… 要不你搜索一下？” 在 IRC 的聊天室里，由于隔着网络的屏障，这种对提问者没礼貌的现象就更加嚣张。我曾经有几次去 Java 的聊天室问一些貌似基础，而其实很深入的语言设计问题，结果没有一次不是以收到像“去读 API！”这样的回答而结束。API 谁不会读，然而我需要的是一个有血有肉的人对此的理解。所以后来我根本不去 IRC 这种地方了，因为那里面对你打字的基本上已经不是人类了。他们觉得你问问题浪费了他们的时间，然而他们一天到晚泡在 IRC 里面好像就是在做什么正事似的。后来你发现，原来在 IRC 里面训斥新手就是他们唯一的乐趣。 像 Haskell 之类的聊天室貌似稍微友好一点，然而后来你发现他们显得友好是有所企图的。因为当时 Haskell 还没有很多人用，他们需要吸引新手，竭尽所能的诱导他们。而一旦你变成了专家，就会发现当对它的设计提出异议的时候，“id”们是多么的不友好。最后你发现，其实所有语言的所谓“社区”都一个德行。如果 Haskell 有一天像 Java 一样如日中天（当然不大可能），肯定对大部分问题的答案也就是“去读 API！” 不得不指出，《提问的艺术》等介绍“黑客文化”的文章对于这种现象的出现有着极大的责任。这种文章试图抹去人类文明几千年来传承的文化，而重新给“礼貌”做出定义。其结果是，人类的文明因为这些文章，在程序员的世界里倒退了几十甚至几百年。很多外行人人不喜欢跟程序员说话，叫他们是 nerd，就是这个原因。 不要提问，不要谦虚，不要恭维 跟上面的症状相似，程序员世界里的一条重要的潜规则是：只有菜鸟才会问问题。所以如果你有任何机会可以自己得到答案，就不要试图向人“请教”，尤其不要显得好奇，否则你就会被认为是菜鸟。我有几次不耻下问的经历，最后导致了我被人当成菜鸟。我只是觉得那问题有趣，也许能够启发我设计自己的东西，所以吃饭时觉得是个话题可以说一下，结果呢就有人忙着鄙视你，那么小的问题都没搞清楚。正确的态度应该是诚实，直接，见惯不惊，那有什么大不了的，我什么没见过，我很怀疑。 随之而来的引论就是：不要谦虚！那些“职场经验”之类的文章告诉你的进入新的公司工作，要谦虚好问，对 IT 公司这种不讲美德的地方是不管用的。有的大 IT 公司有所谓的“文化”，比如叫你要“Googley”，要“humble”，其实只是用来贬低你价值的借口。他们要你向他们“学习”，但其实他们没有什么值得学习的地方。他们只是想让你安于“本分”，做一些微不足道，不能发挥你才能的工作。所以跟江湖一样，在 IT 公司里面一件很重要的事情是，亮出自己的宝剑和绝招，给人下马威。介绍自己的东西一定要自豪，这就是世界上最好的，无敌的，没有其他人能做到！不能有任何保留。不要像科学家一样介绍自己技术的局限性，否则随之而来的就是有些人对你价值的怀疑和对你自信心的打击。 另外要注意的是对于别人介绍的东西，不要轻易地表扬或者点头，否则有人就更有气势了。你要问这样的问题：这里面有什么新的东西吗？这个事情，另外一种技术早就能做了啊，没觉得有什么了不起。 哎，总之这样还是很累，所以最好是能不跟程序员讲话就不讲。 以语言取人 你的软件是什么语言写的，告诉别人的时候是千万要小心的，不到万不得已最好不要说。因为十有八九，对方会立即会在心里对你的软件的价值做出判断，光凭你用的是什么语言。 很多程序员都以自己会用最近流行的一些新语言为豪，以为有了它们自己就成了更好的程序员。他们看不到，用新的语言并不能让他们成为更好的程序员。其实最厉害的程序员无论用什么语言都能写出很好的代码。在他们的头脑里其实只有一种语言，他们首先用这种语言把问题建模出来，然后根据实际需要“翻译”成最后的代码。这种在头脑里的建模过程的价值，是很难用他最后用语言的优劣来衡量的。有时候一个程序员用一个语言并不是因为他只会用那种语言，而是其他的原因。可是很多人误以为他们不愿意学习“新”的东西，从而从心里鄙视他们。 这种以语言取人的现象甚至出现在一些公司里。很可笑的是，我前段时间面试的所有使用 Python 的公司，最后都认定了我是 Python 的菜鸟。然而我的水平显然高过 Python 的创造者 Guido van Rossum 很多。在制造了 PySonar 之后，他对程序语言的理解，他的每一个可笑的错误都被我看得清清楚楚。当然，Ruby 就更烂了。 跟屁虫 有些程序员对新手和同事是那么的不友好，然而对大牛们拍马屁的功夫可真是出类拔萃。我刚到旧金山的几个月经常参加一些程序语言的“meetup”，后来我发现这种 meetup 都是宗教气氛非常浓厚的地方，跟传销大会差不多。Scala 的 meetup 里面的人几乎全都对 Scala 和 Martin Odersky 顶礼膜拜。Clojure 的，当然基本上把 Rich Hickey 当成神。各种 talk 总是宣扬，哇，我们用 Scala/Clojure 做出了多么了不起的东西云云…… 很多人喜欢做这些新的语言和技术的“evangelist”，尽显各种马屁神功，然后就开始写书，写 blog，…… 目的就是成为这个“领域”的第一批专家。这就难怪了，再垃圾的语言也有一大批人来鼓吹。因为这些没真本事的人，随便把一个东西捧上天都有自己的好处。 由于受到这些“先知”的影响，有些人开始在他们自己的公司里“布道”。比如有人在 Python 的 meetup 集会时告诉我，他试图在自己的小组里推 Python，可是一些老顽固一定要用 Java，认为 Java 才是王道。很鄙夷不高兴的样子。 看到这些我终于理解了，一些地区是如何被从一个国家分裂出去，最后沦落为另外一个国家殖民地的。最早的时候，一般是派传教士过去“传经”，然后就煽动一小部分人起来造反。到后来就可以名正言顺的以“保护传教士”，“保护宗教自由”，“维持和平”等理由把军舰开到别人家门口……