日常開發(fā)中總會遇到這樣的一個(gè)問題:如何保存第三方sdk的授權(quán)信息,或者網(wǎng)站的endpoint,在代碼上傳到Github上后不會被別人知道?
Easy?的確!
想法:只要將保存有私密信息的文件添加進(jìn)gitignore文件就好了!
問題:那開發(fā)的時(shí)候如何在代碼中讀取這些信息呢?打包工具可不會把文件給你加到apk中。
想法:加入到raw資源文件夾,怎么樣?這樣可以很方便讀取
問題:apk解壓后raw文件是可以直接得到的,很不安全。
那么問題的本質(zhì)就是讀取,只要解決這個(gè)就好了。下面就來說說如何讓gradle在編譯時(shí)讀取我們的私密信息文件,并打包進(jìn)apk。
一、存儲格式
類似于第網(wǎng)站的入口,第三方API授權(quán)這些信息最好的存儲格式是鍵值對,例如:
app_key=123
endpoint=http://www.1024.com
然后通過Java的Properties類快速解析,獲取想要的值。
一般都是把保存有這些信息的文件放到項(xiàng)目的根目錄下(記得gitignore掉),或者添加到gradle.properties文件中(推薦使用這種方法,這種方法后續(xù)處理也最為便捷),也有人存放在local.properties里(不建議,local.properties的注釋里說明了非gradle生成的內(nèi)容很可能被reset掉)。
二、讀取
我們的目的是要在項(xiàng)目的源代碼中能得到對應(yīng)的信息,但為了達(dá)到這個(gè)目的,我們需要gradle做為中間人幫忙轉(zhuǎn)換一下。具體流程是:
私密文件——>gradle讀取并處理——>BuildConfig靜態(tài)域或者XML資源文件
分為兩類講:
(1)存儲在非gradle.properties文件里時(shí):
你需要在gradle的配置文件中加入如下代碼,使得gradle讀取你的文件,并最工程中生成相應(yīng)的資源,以方便你訪問。
resValue會生成相應(yīng)的XML文件,可以通過R.string.app_key訪問。
buildConfigField會講變量生成為BuildConfig的靜態(tài)域,可以通過BuildConfig.APP_KEY訪問,需要注意圖片的雙引號的寫法,否則生成的BuildConfig類不正確。
(2)存儲在gradle.properties文件里時(shí):
如下代碼:
對!就是這么簡單,實(shí)現(xiàn)同樣的功能。這是因?yàn)間radle已經(jīng)加載過gradle.properties文件了,你只需要使用就行。(語法類似于jsp網(wǎng)頁)
三、結(jié)束
使用(1)時(shí)記得將文件名添加到gitignore中喲!
我是歪脖子,Android實(shí)習(xí)工,業(yè)余年輕“司機(jī)”,喜歡Python,熱愛編程。歡迎follow我的微博:http://weibo.fallblank.me