日常開(kāi)發(fā)中總會(huì)遇到這樣的一個(gè)問(wèn)題:如何保存第三方sdk的授權(quán)信息,或者網(wǎng)站的endpoint,在代碼上傳到Github上后不會(huì)被別人知道睛蛛?
Easy?的確胧谈!
想法:只要將保存有私密信息的文件添加進(jìn)gitignore文件就好了忆肾!
問(wèn)題:那開(kāi)發(fā)的時(shí)候如何在代碼中讀取這些信息呢?打包工具可不會(huì)把文件給你加到apk中菱肖。
想法:加入到raw資源文件夾客冈,怎么樣?這樣可以很方便讀取
問(wèn)題:apk解壓后raw文件是可以直接得到的蔑滓,很不安全郊酒。
那么問(wèn)題的本質(zhì)就是讀取,只要解決這個(gè)就好了键袱。下面就來(lái)說(shuō)說(shuō)如何讓gradle在編譯時(shí)讀取我們的私密信息文件燎窘,并打包進(jìn)apk。
一蹄咖、存儲(chǔ)格式
類似于第網(wǎng)站的入口褐健,第三方API授權(quán)這些信息最好的存儲(chǔ)格式是鍵值對(duì),例如:
app_key=123
endpoint=http://www.1024.com
然后通過(guò)Java的Properties類快速解析澜汤,獲取想要的值蚜迅。
一般都是把保存有這些信息的文件放到項(xiàng)目的根目錄下(記得gitignore掉),或者添加到gradle.properties文件中(推薦使用這種方法俊抵,這種方法后續(xù)處理也最為便捷)谁不,也有人存放在local.properties里(不建議,local.properties的注釋里說(shuō)明了非gradle生成的內(nèi)容很可能被reset掉)徽诲。
二刹帕、讀取
我們的目的是要在項(xiàng)目的源代碼中能得到對(duì)應(yīng)的信息,但為了達(dá)到這個(gè)目的谎替,我們需要gradle做為中間人幫忙轉(zhuǎn)換一下偷溺。具體流程是:
私密文件——>gradle讀取并處理——>BuildConfig靜態(tài)域或者XML資源文件
分為兩類講:
(1)存儲(chǔ)在非gradle.properties文件里時(shí):
你需要在gradle的配置文件中加入如下代碼,使得gradle讀取你的文件钱贯,并最工程中生成相應(yīng)的資源挫掏,以方便你訪問(wèn)。
resValue會(huì)生成相應(yīng)的XML文件秩命,可以通過(guò)R.string.app_key訪問(wèn)尉共。
buildConfigField會(huì)講變量生成為BuildConfig的靜態(tài)域,可以通過(guò)BuildConfig.APP_KEY訪問(wèn)硫麻,需要注意圖片的雙引號(hào)的寫法爸邢,否則生成的BuildConfig類不正確。
(2)存儲(chǔ)在gradle.properties文件里時(shí):
如下代碼:
對(duì)拿愧!就是這么簡(jiǎn)單杠河,實(shí)現(xiàn)同樣的功能。這是因?yàn)間radle已經(jīng)加載過(guò)gradle.properties文件了浇辜,你只需要使用就行券敌。(語(yǔ)法類似于jsp網(wǎng)頁(yè))
三、結(jié)束
使用(1)時(shí)記得將文件名添加到gitignore中喲柳洋!
我是歪脖子待诅,Android實(shí)習(xí)工,業(yè)余年輕“司機(jī)”熊镣,喜歡Python卑雁,熱愛(ài)編程募书。歡迎follow我的微博:http://weibo.fallblank.me