Android Studio を使ってみる

Android

Android Studio を使ってみる

バージョンBeta0.8.14を使ってみました。
超簡単なさわりのところしかわかっていませんが、とりあえずメモ的に残しておきます。

  1. 下記のサイトからダウンロード

http://developer.android.com/sdk/installing/studio.html

  1. 解凍でできたフォルダ内の bin>studio64.exeを実行して起動
  2. インポートするプロジェクトなどを聞いてきます。適宜インポート。
  3. プロジェクトが開けると、下記のような画面になります。colors.xmlを開くと、色を左にプレビューしてくれます。素敵!

android_studio.png

  1. Gradleというビルドツールがよいらしいです。ワクワク
  2. 設定は、左上のFile→Settingsで変更できます。

しかし、下記のような外部ライブラリの読み込みエラーが解決できず

Error:(54, -1) android-apt-compiler: [hogehoge] C:\Users\hogehoge\AndroidManifest.xml:54: error: Error: No resource found that matches the given name (at ‘value’ with value ‘@integer/google_play_services_version’).

実際に業務に利用するまでには至りませんでした…。

下記にAdd Google Play Service to your projectというドキュメントもありますけどね…。
http://developer.android.com/google/play-services/setup.html

何かを期待して来られてたらすみません。(^_^;

まだまだADTの方が楽ですね。。。

Android Studio flavorでやりたいことを切り替えるのが失敗する

Android

Android Studio Flavorでやりたいことを切り替えるサンプル
で、Build Valiantのflavorを使ってやりたいことを切り替えるやり方を紹介しましたが、うまく行かない時があります。。(´・ω・`)

そういう時は、ディレクトリ構成を確認してみましょう!

たとえば、test_verとrelease_verのディレクトリでのstringsの切り替えは、下記のような構成になっていないとダメですが

 C:\Android\hogehoge\src\test_ver\res\values\strings.xml
 C:\Android\hogehoge\src\release_ver\res\values\strings.xml

私はvaluesのフォルダがなくってうまく行かず、1時間ぐらい悩んじゃいました(つД`)

Android Studio Signed APKでThis fragment should provide a default constructor

Android

Android Studioで開発中は普通にRunできていたのに、いざ、Google Playへ公開!と思って、Generate Signed APKとすると、次のエラーが出て、証明書でサインされたApkファイルが作れません。

 Error:(16, 12) Error: This fragment should provide a default
 constructor (a public constructor with no arguments)   
 (hogehoge.dialog.DaySelectDialogFragment) [ValidFragment]
 public class DaySelectDialogFragment extends DialogFragment {

うげーっってなりますよね。
ちなみに、ダメ!って言われた、DaySelectDialogFragmentのコードはこちら。

 public class DaySelectDialogFragment extends DialogFragment {
 
    private ArrayList<Integer> mSelectedItems;
    private SettingAlarmHelper alarmHelper;
    private Context context;
    private TextView on_sunday;
    private TextView on_tuesday;
    private TextView on_monday;
    private TextView on_wednesday;
    private TextView on_thursday;
    private TextView on_friday;
    private TextView on_saturday;
    private TextView no_days_select;
    private String type;
    private TextView off_sunday;
    private TextView off_monday;
    private TextView off_tuesday;
    private TextView off_wednesday;
    private TextView off_thursday;
    private TextView off_friday;
    private TextView no_days_select_off;
    private TextView off_saturday;
 
    public DaySelectDialogFragment() {};
 
    public DaySelectDialogFragment(String _type, ArrayList<Integer> _items,
            SettingAlarmHelper _alarmHelper, Context _context,
            TextView _on_sunday, TextView _on_monday, TextView _on_tuesday,
            TextView _on_wednesday, TextView _on_thursday, TextView _on_friday,
            TextView _on_saturday, TextView _no_days_select,
            TextView _off_sunday, TextView _off_monday, TextView _off_tuesday,
            TextView _off_wednesday, TextView _off_thursday, TextView _off_friday,
            TextView _off_saturday, TextView _no_days_select_off) {
 
        type = _type;
        mSelectedItems = _items;
        alarmHelper = _alarmHelper;
        context = _context;
        on_sunday = _on_sunday;
        on_monday = _on_monday;
        on_tuesday = _on_tuesday;
        on_wednesday = _on_wednesday;
        on_thursday = _on_thursday;
        on_friday = _on_friday;
        on_saturday = _on_saturday;
        no_days_select = _no_days_select;
 
        off_sunday = _off_sunday;
        off_monday = _off_monday;
        off_tuesday = _off_tuesday;
        off_wednesday = _off_wednesday;
        off_thursday = _off_thursday;
        off_friday = _off_friday;
        off_saturday = _off_saturday;
        no_days_select_off = _no_days_select_off;
    }
 
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
 …以下略

下記に情報がありました。

http://stackoverflow.com/questions/29762949/error-this-fragment-should-provide-a-default-constructor-a-public-constructor

空のコンストラクタ作って、セッターで値をセットしよう!
だそうです。
しかし、時間がなかったので、とりあえずbuild.gradleに下記のように書けば、証明書でサインしたアプリが作れました。

 android{
    
    compileSdkVersion 17
    buildToolsVersion "21.1.0"
    dexOptions {
        jumboMode true
    }
    lintOptions {
        abortOnError false
        checkReleaseBuilds false
    }
 }

Android Studio SVNの取り込みがうまくいかない

Android

Android Studio SVNの取り込みがうまくいかない

Cannot load supprted formats: Cannot run program “svn”: CreateProcess error=2,
というエラーが出てしまって、SVNをAndroid Studioで取り込めない時はコマンドラインのsvnができないことに起因するようです。

http://stackoverflow.com/questions/22677210/android-studio-0-5-2-svn-checkout-not-working


下記からWindows用のSVNのコマンドラインのプログラムをダウンロードしてきて、システム環境変数に設定します。
http://sourceforge.net/projects/win32svn/

コマンドプロンプトからsvnとやって実行できるようになればOKです。


また、Android Studioの設定画面で、SVNの設定のディレクトリを指定します。
最初のQuick Startの画面で、Configure→Settingsとクリックします。
Version Control→SubversionのUse System default Subversion…のところに、先ほどダウンロードして設定したSVNのディレクトリ+binを入力して、OKをクリックします。

そのあと、私はPCを再起動しないとダメでしたが、実際はAndroid Studioを再起動すればよかっただけかもしれません。

Android Studio Flavorでやりたいことを切り替えるサンプル

Android
Android Studio1.3.1

Android StudioのFlavor設定で初心者がはまりやすい落とし穴をまじえながら解説します。

なんだかんだ言いながら、Android Studioを使い始めています。
Eclipseから移行すると、作法がいろいろ違うので、とまどいます。
♪とまーどい 学んで 汗を流して いつも何かに傷つきながら

さて、Android Studioで一番やりたかったのは、Gradleを利用して、よくある次のようなことをやりたかったのです。

たとえば、弊社で配布しているSmart動態管理というアプリには、請求書で支払っている顧客とGoogle Playからダウンロードしていただいているお客様がいます。(例なので、実際のアプリの動きとは多少違いますが)
次のように、今まではマニュアルで変更していました。

  1. 請求書を送るアプリは名称を「請求書版」とつけ、請求書サイトに接続する
  2. Google Playからダウンロードするアプリは名称から「請求書版」を外し、Google Playのサイトに接続する

それで、テスト版と、リリース版があり、それだけで4通りのアプリが必要になるわけです。
4通りというのは、次の4通りです。

  1. 請求書版のテストアプリ
  2. 請求書版のリリースアプリ
  3. Google Playのテストアプリ
  4. Google Playのリリースアプリ

で、このあたりがFlavorというものの設定によって、簡単にできます。

まずはFlavorを作っておきます。
時代は進み、build.gradleを編集しなくても、GUIで設定できるのです。
Flavorの作り方はFile→Project Structureで、モジュールに自分が設定したいモジュールが選択されているのを確認して、Flavorsのタブをクリックします。
プラスボタンをクリックして、とりあえず、名前だけを最低限設定します。
android_studio_flavor_new.png
invoice と google_play のフレーバーを作ります。

すると、build.gradleに次の一文ができています。

    productFlavors {
        invoice {
        }
        google_play {
        }
    }

で、肝心の内容の変更です。

いろんな方のサイトを拝見すると、ディレクトリの名前とFlavorの名前を合わせて配置する、とのことでした。
http://iti.hatenablog.jp/entry/2015/06/22/084303

Windows10で開発していますので、エクスプローラーを使って次のようなディレクトリ構成を作ります。

フレーバーを追加する前は、ソースファイルや言語ファイルなどは次のような構成です。

smart_location\src\main\smart\location\…この中にjavaのソースファイルがごちゃっと入っています
smart_location\res\values\strings.xml…もともとの言語ファイル

これに、srcの中にinvoiceというフォルダを作って、次のようにinvoice用の言語ファイルを作ります。
smart_location\src\invoice\res/values/strings.xml

それぞれ、ファイルの内容は次の通りです。

 smart_location\res\values\strings.xml
 これはデフォルトの言語設定
 
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
    <string name="fetching">サーバーと通信中です。</string>
    <string name="app_name">Smart動態管理</string>
    <string name="btn_label">送信</string>
    <string name="back">戻る</string>
    …その他、書ききれないほどの言語設定
 smart_location\src\invoice\res/values/strings.xml
 これは請求書版のみに利用する言語設定なので、とりあえずアプリタイトルを変更するサンプル
 <?xml version="1.0" encoding="utf-8"?>
 <resources> 
    <string name="app_name">Smart動態管理 請求書版</string> 
 </resources>

で、ここまでは別にOKだったのですが、こっから先がつまづきました。
Android Studioのソースツリーを表示するペインに、invoiceディレクトリが出てこないんですよ。

android_studio_flavor2_new.png

上記の赤丸のように、srcのすぐ下にres/values/strings.xmlとなっている。
strings.xmlの中身は、確かにsmart_location\src\invoice\res/values/strings.xmlなのに…
なんで?解せぬ…。(´・ω・`)
と悩むことしきり。
Runしてみると、Stringファイルは確かにinvoice版が表示されているんですけどね。

で、ちょいちょい試していたら、理由がわかりました!

android_studio_flavor3_new.png

上記の赤丸のとこをクリックで、4つのフレーバーが変更できるようになるのですが、フレーバーのinvoiceを選択している場合は、親切にもinvoiceディレクトリを省略してくれるんですね!!

試しにフレーバーをgoogle_playDebugを選択したら、下記の図の上の赤丸部分のようにinvoice.res.values/strings.xmlと表示されるようになりました!

android_studio_flavor4_new.png

よかったよかったo(>▽<)o