2014年2月8日
摘要:
基于官方文檔2013.12.19最后一次改動。
翻譯人:Weir Zhang (zh.weir)
旁白:水平有限,很多地方只是意譯。不準確的地方,大家以原版文檔為準。
原版地址:http://google-styleguide.googlecode.com/svn/trunk/javaguide.html
一、介紹
本文檔為Google Java編程規范的完整定義。依照此規范編寫的Java源碼文件可以被稱為Google Style。
和其他編程規范指南一樣,規范不僅包括了代碼的結構美學,也包括了其他一些業界約定俗成的公約和普遍采用的標準。本文檔中的規范基本都是業界已經達成共識的標準,我們盡量避免去定義那些還存在爭議的地方。
1.1 術語說明
本文檔除非特殊說明,否則:
a、class(類)統指普通的class類型、enum枚舉類型、interfa
閱讀全文
2013年12月17日
摘要: 背景
事實上,在前些年,隨著wifi的興起,特別是wifi direct的推出,藍牙一度沒落了。然而近一兩年隨著移動智能終端指數級增長,穿戴式設備興起,藍牙4.0推出,特別是低功耗藍牙(BLE)的推出,藍牙又煥發了新的青春氣息。
此次藍牙的復興,可以明顯感覺出人們對藍牙與wifi訴求的差異化。wifi的優勢在于傳輸速度,大文件、塊數據的傳輸,正很快地向wifi direct切換。而藍牙的優勢在于多樣化設備間的無線連接和數據共享。
藍牙之所以有這個優勢,我想主要原因是藍牙歷史悠久,有相當多現成的設備間通信標準和協議。另外藍牙模塊成本低、體積小,非常適合應用于穿戴式設備等小型設備。加之新推出的低功耗藍牙將耗電量降得非常低,穿戴設備用一個紐扣電池就能用好幾個月甚至幾年。
經典藍牙應用場景包括藍牙耳機、藍牙音箱、藍牙鼠標、藍牙鍵盤等。而隨著低功耗藍牙的推出,穿戴式設備開始流行起來,例如手環、手表、防丟掛件等。
穿戴式設備對藍牙來說預示著一種趨勢。那就是在Android與Arduino讓一切物體智能起來的時代,藍牙可以作為一種強大穩定的無線通信技術,讓一切
閱讀全文
2013年12月9日
摘要: 一、關鍵概念:
Generic Attribute Profile (GATT)
通過BLE連接,讀寫屬性類小數據的Profile通用規范。現在所有的BLE應用Profile都是基于GATT的。
Attribute Protocol (ATT)
GATT是基于ATT Protocol的。ATT針對BLE設備做了專門的優化,具體就是在傳輸過程中使用盡量少的數據。每個屬性都有一個唯一的UUID,屬性將以characteristics and services的形式傳輸。
Characteristic
Characteristic可以理解為一個數據類型,它包括一個value和0至多個對次value的描述(Descriptor)。
Descriptor
對Characteristic的描述,例如范圍、計量單位等。
Service
Characteristic的集合。例如一個service叫做“Heart Rate Monitor”,它可能包含多個Characteris
閱讀全文
2013年9月8日
摘要: 從最近幾年開始,做平臺的公司都流行起Open API。這是一個非常好的理念,也受到廣大開發者的歡迎。如今,開發一款軟件,你可以很容易地集成微博、微信、人人網等流行社交媒介的分享功能,做一個社交應用變得越來越簡單。
主流社交媒介要集成到第三方應用中,最重要的入口就是安全便捷的授權認證系統。讓用戶在享受一鍵分享和各種社交樂趣的同時,又不用擔心帳號安全和隱私泄露等問題。而對于一些有特殊目的的組織或個人來說,攻占這個授權認證系統意味著自己獲取了信息傳播的入口和渠道,數量龐大地社交入口往往能帶來巨大的社會效應。所以,這個入口就成了軟件安全攻防雙方的必爭之地。
而本文所要講的就是當前最為流行的新浪微博Android客戶端SSO授權認證入口的一個安全缺陷。此缺陷使得第三方APK在一定條件下可以不通過授權,在不需要人為操作的情況下就可以操作Android手機用戶的微博。包括關注、評論、發微博等OpenAPI中提供的功能。
閱讀全文
2013年8月14日
摘要: 最近微信出了5.0,新增了游戲中心,并內置了一個經典游戲《飛機大戰》。游戲其實很簡單,但由于可以和好友一起競爭排名,一時間受到大家的追捧,小伙伴們進入“全民打飛機”時代。
ios 版出來不久就被破解出了無敵模式。Android版出后好像一直風平浪靜。周末無事,加之看雪zmworm版主邀請,于是花了一天的工夫研究了下。也出了個Android版的無敵模式增強版。具體來說就是無敵、雙排子彈加無限炸彈。當然,這個不是重點,我們的重點當然是技術細節啦!
微信的游戲繼承了Android版手機QQ游戲中心的思想,也采用插件動態加載方式。具體來說,就是插件及游戲以jar包形式存在,jar包中有classes.dex及其他資源文件,在運行時動態加載資源及classes.dex代碼。這樣的好處是靈活管理,易于擴展。以后更多的游戲只要上架到微信的服務器,用戶就能在微信應用內部下載、安裝、運行。具體原理可以參考我2011年的一篇文章《Android類動態加載技術》 。
當然,那篇文章講的只是基本原理,而微信在代碼動態加載方面則走得更遠。針對插件的管理
閱讀全文
2013年7月6日
摘要: Bluebox Security在7月3號的時候,在官網上發布了一個據稱99% Android機器都有的一個漏洞。國內最早在4號開始有媒體報道,并持續升溫。該漏洞可使攻擊者在不更改Android應用程序的開發者簽名的情況下,對APK代碼進行修改。并且,這個漏洞涉及到從1.6版本至今全部的Android版本,換句話說,這4年中生產的9億設備,即當今市場上99%的Android產品都面臨這一問題。
看到這樣的報道,一開始我和我的小伙伴們都不敢相信。因為簽名機制用了這么多年,多少大腦袋厚眼鏡的天才們想要顛覆都沒搞定,Bluebox Security怎么可能搞定的呢?不過,由于好奇心驅使,我開始查看Bluebox Security官方的說法:《UNCOVERING ANDROID MASTER KEY THAT MAKES 99% OF DEVICES VULNERABLE》,我意識到,這個問題應該不是簽名機制本身的問題,而是Android安裝APK過程中的校驗存在漏洞。
如果是APK安裝校驗簽名的漏洞,而這個Bug又從1.6開始就有,那
閱讀全文
2012年3月1日
摘要: 昨天想到一個點子,需要訪問股票行情。于是在網上搜了一下免費的股市行情的接口。發現新浪股票的數據接口比較穩定,于是就用它了。
網上對于新浪股票的數據接口介紹比較詳細,并且實現也很簡單,所以花了一下午就基本完成了。想到大家開發Android應用可能也會需要訪問股市行情,特此將資料整理在此,并附上Javadoc文檔和一個小Demo,以便后來人開發更為便捷。
閱讀全文
2011年10月29日
摘要: Android應用開發在一般情況下,常規的開發方式和代碼架構就能滿足我們的普通需求。但是有些特殊問題,常常引發我們進一步的沉思。我們從沉思中產生頓悟,從而產生新的技術形式。
如何開發一個可以自定義控件的Android應用?就像eclipse一樣,可以動態加載插件;如何讓Android應用執行服務器上的不可預知的代碼?如何對Android應用加密,而只在執行時自解密,從而防止被破解?……
熟悉Java技術的朋友,可能意識到,我們需要使用類加載器靈活的加載執行的類。這在Java里已經算是一項比較成熟的技術了,但是在Android中,我們大多數人都還非常陌生。
閱讀全文
2011年7月19日
摘要: 發布過Android應用的朋友們應該都知道,Android APK的發布是需要簽名的。簽名機制在Android應用和框架中有著十分重要的作用。
例如,Android系統禁止更新安裝簽名不一致的APK;如果應用需要使用system權限,必須保證APK簽名與Framework簽名一致,等等。在《APK Crack》一文中,我們了解到,要破解一個APK,必然需要重新對APK進行簽名。而這個簽名,一般情況無法再與APK原先的簽名保持一致。(除非APK原作者的私鑰泄漏,那已經是另一個層次的軟件安全問題了。)
簡單地說,簽名機制標明了APK的發行機構。因此,站在軟件安全的角度,我們就可以通過比對APK的簽名情況,判斷此APK是否由“官方”發行,而不是被破解篡改過重新簽名打包的“盜版軟件”。
閱讀全文
2011年7月12日
摘要: ProGuard是一個SourceForge上非常知名的開源項目。官網網址是:http://proguard.sourceforge.net/。
Java的字節碼一般是非常容易反編譯的。為了很好的保護Java源代碼,我們往往會對編譯好的class文件進行混淆處理。ProGuard的主要作用就是混淆。當然它還能對字節碼進行縮減體積、優化等,但那些對于我們來說都算是次要的功能。
引用ProGuard官方的一段話來介紹就是:
ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining cla
閱讀全文