Androidアプリでのセキュリティ情報の定義方法
背景
Androidアプリ開発にてセキュリティ情報(他サービスのAPIキーなど)を定義しますが、それらの情報はGithubなどのソースコード管理にコミットはしないほうがいいので、その定義方法を書いておきます。
定義方法
セキュリティ情報の定義
- security.properties
セキュリティ情報を記載するプロパティファイル。このファイルはコミットしない(要ignoreファイルに追記)。
コミット防止観点からいうとできるだけ一箇所でまとめたい。サービスごとに分けるなら「security-{サービス}.properties」とかにして、「security-*」とかでignoreしたほうがいいかも。
例:
# Fabric fabric.api.key={実際の値をいれる} # twitter twitter.api.key={実際の値をいれる} twitter.api.secret={実際の値をいれる}
セキュリティ情報(プロパティ)の取り込み
別の設定ファイルやソースコード等で利用するために、先に記載したプロパティ値を読み込む。
設定ファイルが参照したいときは「manifestPlaceholders」にいれる。
ソースコードから参照したいときは「buildConfigField」にいれる。※BuildConfigというファイルに設定値が書き出されるので、定義したらビルドが必要。(もちろんBuildConfigもコミットしてはいけない)
* build.gradle
・・・ Properties props = new Properties() try { props.load(file('security.properties').newDataInputStream()) } catch (Exception ex) { throw new GradleException("can not load *.properties"); } ・・・ android { ・・・ defaultConfig { ・・・ manifestPlaceholders = [fabricApiKey: "${props.getProperty("fabric.api.key")}"]; ・・・ } buildTypes { debug { buildConfigField "String", "TWITTER_API_KEY", "\"${props.getProperty("twitter.api.key")}\"" buildConfigField "String", "TWITTER_API_SECRET", "\"${props.getProperty("twitter.api.secret")}\"" ・・・ } } productFlavors { } } ・・・
設定ファイルから値を利用する
登録した参照キーで参照できる。
* 例:AndroidManifest.xml
<meta-data android:name="io.fabric.ApiKey" android:value="${fabricApiKey}" />
ソースコードから値を参照する
登録した参照キーで参照できる。
* 例
public class MainActivity extends AppCompatActivity { ・・・ # 参照しているところ private static final String TWITTER_API_KEY = BuildConfig.TWITTER_API_KEY; private static final String TWITTER_API_SECRET = BuildConfig.TWITTER_API_SECRET; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); # 利用しているところ final TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_API_KEY, TWITTER_API_SECRET); ・・・
まとめ
これが最適かどうかわかっていない(´・ω・`)