カテゴリー別アーカイブ: Android

Android StudioのFlavorsで接続先のURLを変更する。


サーバにリクエストするアプリを作っていて開発用と本番用でリクエストURLを変えたい時にFlavorsを設定すると簡単に出来ました。

参考にさせていただいたサイト:
Build Variants について – 株式会社ネクスト エンジニアBlog
Android Studio で Build Variants

Flavorsの設定方法は上記サイトが詳しいです。
もっと単純に開発用と本番用のリクエストURLを変えたかっただけの場合、
最低限、空のFlavorsの追加とソースをそれぞれに用意して出来ました。

Flavorsの追加

  1. Android Studioのツールバーにある[Project Structure]を開きます。
  2. Flavorsタブを開きます。
  3. [+]ボタンで新規作成し、Nameを「development」にします。Name以外は入れません。
  4. 同様にして、「production」も作成します。

ソースの追加

  1. srcディレクトリ直下に「development」、「production」を作成します。
  2. Build Variantを「developmentDebug」に合わせます。
  3. developmentディレクトリを右クリック、[New]−[Directory]で「java」ディレクトリを作成します。
  4. javaディレクトリを右クリック、[New]−[Package]でパッケージを作成します。
  5. 追加したパッケージにソースファイルを作成します。

productionディレクトリも同様にして作成しますが、以下の注意が必要でした。
Build Variantを「productionDebug」に合わせないとjavaディレクトリでパッケージが作成できませんでした。
単純にディレクトリを作成すれば良いのですが、Build VariantにあったFlavorsのディレクトリをソースとして認識するようです。

追加するソースファイルは、「development」、「production」でそれぞれ同じクラス名にし、
差分だけ書き換えれば大丈夫です。

「development」

「production」

共通部分の「main」で使う。


Androidでグラフ表示(AChartEngine)


Androidでグラフを表示しようと思いましたが、一から作るとなると大変そうだったのでライブラリを探しました。
「Android グラフ」でググると以下のライブラリがありました。

  • HoloGraphLibrary
  • AFreeChart
  • AChartEngine
  • 欲しかったのは滑らかな曲線が引けること、GPLじゃないものだったのでAChartEngineを使ってみました。
    (AFreeChartはLGPLだったので除外。HoloGraphLibraryはライセンスが不明だったので。)

    AChartEngineの使い方は以下のサイトを参考にさせていただきました。
    ありがとうございます。
    aChartEngineについて

    簡単に使えたのでびっくりです。


    Android StudioでVolleyを追加


    Android StudioをVolleyを追加した時の手順です。
    色々参考にさせていただきましたが、所々違ったので記載します。

    Android Studioのバージョンは、0.8.14です。

    参考:
    Androidプロジェクトを新規作成してVolleyが使えるようになるまで

    1. 作成したプロジェクトでgit init

    2. volleyプロジェクトを追加

    3. setting.gradelにvolleyを追加

    4. volleyのbuild.gradle

    のバージョンをサジェストで推奨していた0.13.2に変更。

    5. appのbuild.gradle
    dependenciesにcompile project(‘:modules:volley’)を追加。

    6. volleyのtestのAndroidManifest.xmlでビルドエラー発生

    サジェストが出ていたので、指示通りに対応。
    instrumentationに’tools:replace=”android:targetPackage”‘を追加。
    manifestに’xmlns:tools=”http://schemas.android.com/tools”‘を追加。

    これでビルドエラーが取れました。


    Android Studio 0.8.14 in Beta Channelその2


    前回Android Studioのbeta channelで
    0.8.9から0.8.14にアップデートできなかったのですが、
    とりあえず手動で上書きしたら動きました。

    Downloadページから0.8.14のリンクに移動し、Windows用のzipをダウンロードします。
    zipを展開するとandroid-studioフォルダがあるので、Android Studioをインストールした場所に上書きコピーします。

    Android Studioを起動するとbuilder-model-*.jarが複数あるとエラーが出るので、
    “C:\Program Files (x86)\Android\android-studio\plugins\android\lib\builder-model-0.12.0.jar”を削除しました。
    0.8.14からはbuilder-model-0.14.0.jarになっているようです。

    これで一応0.8.14になりました。
    これでいいんだろうか。。。


    Android Studio 0.8.14 in Beta Channel


    Android Studioは、beta channelを使っています。
    0.8.9を使っていたのですが、0.8.14にアップデートしたらエラーでアップデートできなかったのでメモします。
    mac版は特にエラーなくアップデート出来ましたが、Windows版(Windows7 64bit)だとダメでした。。。

    エラー1.
    Android Studioのインストール先にあるsdkフォルダが移動になりました。
    元々は、”C:\Program Files (x86)\Android\android-studio\sdk”にありましたが、
    0.8.14からは外出しになったようです。
    対応:
     手動でsdkフォルダを一つ上の階層に移動しました。
     次回起動時にsdkフォルダの場所を聞かれるので、フォルダを指定します。

    この件は、公式リリースノートにあります。
    Android Studio 0.8.14 in Beta Channel

    エラー2.
    アップデート中にuninstall.exeが削除できないとエラーになりました。
    対応:
     削除しろとサジェストされたので手動で削除しました。

    エラー3.
    次に、Groovy.jarが削除できないとエラーになりました。。。
    ファイルパスは、”C:\Program Files (x86)\Android\android-studio\plugins\Groovy\lib”です。
    手動でGroovy.jarを削除しましたが、今度はアップデート自体が進まなくなりました。

    Groovy.jarの場所が、削除するのに管理者権限が必要な所なので、
    試しにAndroid Studioを管理者権限で動かしてアップデートしてみましたがエラーは変わらずでした。

    この件はIssueが上がってるみたいです。
    Known Issues
    Issue 78608: Error in update to 0.8.14: ioException, cannot delete file

    ファイルを使っているプロセスをkillして試してくれとありますが、
    これといって犯人そうなプロセスもなく。
    うーむ、どうしたものか。。。


    画像の切り抜き


    キッチンタイマーアプリの売りの機能である画像選択は、
    選択された画像をテンキーの画面サイズに合わせて切り抜くようにしています。
    切り抜きは自前で用意せず、Androidのトリミング機能をIntentで呼び出しています。

    Android標準のトリミング機能を呼び出す方法は、以下のブログを参考しました。
    インテントでAndroid標準のトリミング機能(アプリ)を呼び出す方法
    Capture and Crop an Image with the Device Camera

    実際のソースです。
    各種データを引数で受け取りIntentを返してます。
    切り抜いたデータは、サイズが大きいのでストレージに保存するようにしてます。

    苦戦したのはアスペクト比(引数のaspectX, aspectY)をどうやって計算したら良いかでした。
    正方形ではなく、画面サイズに合わせてテンキーサイズが異なるため計算する必要があります。
    参考にしたのは以下のブログです。
    Crop Image keeping the Aspect Ratio & without Stretch

    テンキーのViewサイズをユークリッドの互除法を使って最大公約数を求めて
    アスペクト比を計算しました。


    CountDownTimerのタイマー表示のブレ


    キッチンタイマーアプリのカウントダウン方法は、CountDownTimerを使いました。
    カウントダウン中のタイマー表示は、CountDownTimer#onTick()で得られた時間を
    “分:秒”の形にして表示しています。
    実際に動かすとタイマーが1秒毎に減っていかない場合がありました。
    10秒→8秒といったように一気に2秒減ります。
    しかし全体としてはちゃんと10秒でアラームがなります。
    なのでタイマー表示だけがおかしい状態でした。

    原因は、インターバル時間を“1秒”にしていたことでした。
    onTick()で終了までのミリ秒を引数で受け取りますが、
    10秒でスタート→8.9・・・秒で受け取る→8.0・・・秒で受け取る
    という動きをしていました。
    コンマ何秒の差で表示にブレが出ていました。

    対応としては、インターバル時間を短くし、
    時間を短することでタイマー表示の精度を上げて回避しました。
    とりあえず半分の0.5秒にすることでこの現象は出なくなりました。