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