Android私密开发信息存储
日常开发中总会遇到这样的一个问题:如何保存第三方sdk的授权信息,或者网站的endpoint,在代码上传到Github上后不会被别人知道?
Easy?的确!
想法:只要将保存有私密信息的文件添加进gitignore文件就好了!
问题:那开发的时候如何在代码中读取这些信息呢?打包工具可不会把文件给你加到apk中。
想法:加入到raw资源文件夹,怎么样?这样可以很方便读取
问题:apk解压后raw文件是可以直接得到的,很不安全。
那么问题的本质就是读取,只要解决这个就好了。下面就来说说如何让gradle在编译时读取我们的私密信息文件,并打包进apk。
一、存储格式
类似于第网站的入口,第三方API授权这些信息最好的存储格式是键值对,例如:
app_key=123
endpoint=http://www.1024.com
然后通过Java的Properties类快速解析,获取想要的值。
一般都是把保存有这些信息的文件放到项目的根目录下(记得gitignore掉),或者添加到gradle.properties文件中(推荐使用这种方法,这种方法后续处理也最为便捷),也有人存放在local.properties里(不建议,local.properties的注释里说明了非gradle生成的内容很可能被reset掉)。
二、读取
我们的目的是要在项目的源代码中能得到对应的信息,但为了达到这个目的,我们需要gradle做为中间人帮忙转换一下。具体流程是:
私密文件——>gradle读取并处理——>BuildConfig静态域或者XML资源文件
分为两类讲:
(1)存储在非gradle.properties文件里时:
你需要在gradle的配置文件中加入如下代码,使得gradle读取你的文件,并最工程中生成相应的资源,以方便你访问。
resValue会生成相应的XML文件,可以通过R.string.app_key访问。
buildConfigField会讲变量生成为BuildConfig的静态域,可以通过BuildConfig.APP_KEY访问,需要注意图片的双引号的写法,否则生成的BuildConfig类不正确。
(2)存储在gradle.properties文件里时:
如下代码:
对!就是这么简单,实现同样的功能。这是因为gradle已经加载过gradle.properties文件了,你只需要使用就行。(语法类似于jsp网页)
三、结束
使用(1)时记得将文件名添加到gitignore中哟!
我是歪脖子,Android实习工,业余年轻“司机”,喜欢Python,热爱编程。欢迎follow我的微博:http://weibo.fallblank.me