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