aswww log

エンジニアの技術録。アプリとかウェブとか

Andoridアプリの開発と本番の取扱をGradleでどうにかする

参考にしたサイトは以下。
https://firespeed.org/diary.php?diary=kenz-1824

Andoroidアプリ界隈で開発と本番は

開発=debug、本番=release

っぽいので以下はそれに則って記載する。

○一つの端末にデバッグバージョンアプリとリリースバージョンアプリを共存させたい
Module内にあるbuild.gradleを以下のとおり修正する。

    buildTypes {
        debug{
            applicationIdSuffix ".debug"
        }
        release {
		・
		・
		・

ビルド時にデバッグバージョンアプリの時は、アプリIDに.debugがつくので、アプリバージョンIDがリリースバージョンと被らない=共存できる

○開発と本番で設定ファイルを切り替えたい。
以下のとおり設定ファイルを切り替えられる。

  • 本番用定数

/src/main/res/values/strings.xml

<resources>
    <string name="app_name">Sample application</string>
    <string name="url">http://gati.net</string>
</resources>

/src/debug/res/values/strings.xml

<resources>
    <string name="url">http://uso.net</string>
</resources>

Javaソースコード内で参照する際は普通にR.string.urlでOK。

WEBアプリのようにENVで切り替えられないのは少し不便。

WebView内で通信エラーでエラー画面表示さす

WebView内で通信エラーになった場合(net::ERR_CONNECTION_TIMED_OUT)、エラーページを表示さすようにハンドリング
#WebViewClient生成時に定義してあげる

○準備(既にassetsディレクトリがある場合は不要)
HTMLを置くassetsディレクトリを作成する。
AndroidStudioのプロジェクトのappを右クリック→[新規]→[New]→[Folder]→[Assets Folder]を選択。
app/src/main/asestsディレクトリが作成される。
また、build.gradleに以下のとおり追記する。(自動挿入されることもあるので、既にあったら編集不要)

android {
    sourceSets{
        main{
            assets.srcDirs=["src/main/assets"]
        }
    }
・
・
・

app/src/main/asestsにエラー画面のHTML(network_error.html)を配置して準備終了

○WebViewクラスにコーディング

次のとおりWebView生成時にオーバーラードして実装する。

WebView webView = (WebView) findViewById(R.id.webView);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedError(WebView webview, int errorCode, String description, String failingUrl) {
        if(errorCode < 0){
            // 自作のエラーページを表示
            webView.loadUrl(“file:///android_asset/network_error.html”);
        }
    }

参考URL
http://www.hangout.co.jp/blog/archives/148
http://stackoverflow.com/questions/4997677/android-webview-onreceivederror
http://growsic.com/blog/androidlocalhtml/