ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2014年5月5日月曜日

【Mac、Android】MacのAndroidエミュレータを3倍速くする方法

MacでAndroidアプリを作ろうとしてるんだけど
エミュレータが遅くてイライラ。

色々調べて動作を速くできたのでメモ。

環境

このときのまま。

  • Mac Book Air 2013 Mid 13inch
  • Mac OS X 10.8.5

必要なファイルのダウンロード

Android SDK Managerで下記をダウンロード

Extras->Intel x86 Emulator Accelerator (HAXM installer)

好きなAndroidバージョンのIntel x86 Atom System Image


Emulator Acceleratorのインストール

ダウンロードしたIntelHAXM_x.x.x.dmgを実行

mpkgファイルが出てくるのでそれも実行

インストーラが起動するのでそのままインストール

AVDの作成に入る前に念のためADT(Eclipse)再起動

トラブル発生

Eclipseを再起動したらAndroid Developer Toolkitが古いって怒られた。
しかもこのまま”Check for Updates"やっても"No updates were found."って言われる…

さらにこの状態だとAndroidSDKManager開こうとしてもエラーしちゃう。
"Location of the Android SDK has not been setup in the prefarences"

言われた通りPrefarences開いても起動時に表示されたエラーが出てるだけだし。
”This Android SDK requires Android Developer Toolkit version 22.6.2 or above.  Current version is 22.0.5.v201307292155--757759.  Please update ADT to the latest version.”

マジ困る。
アップデートが効かないので手動で最新版を取得する事にする。

ここから最新ADTをダウンロード
http://developer.android.com/sdk/index.html
たしかに日付は更新されてるっぽい。

解凍すると"adt-bundle-mac-x86_64-20140321"ってフォルダが現れた。
今使ってるフォルダは"adt-bundle-mac-x86_64-20130729"だったから確かに日付は変わってるっぽい。でも中身は何が変わってるか分からない。困った。
Macだとフォルダ上書きすると中身一度消えちゃうし…。
ちょっと面倒だけど両方残すことにした。
フォルダごとアプリケーションフォルダに移動。

新しい方のADTにはSDKを入れ直しになるだろうけど仕方ない。
うまく動いたら古い方消そう。

Eclipse起動!はい、エラー。
どーなってんの。
"The JVM shared library "/Library/Java/javaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/../jre/lib/server/libjvm.dylib" does not contain the JNI_CreateJavaVM symbol."

http://burrsutter.blogspot.jp/2013/12/eclipse-does-not-contain.html
調べてみると結構困ってる人多いみたい。

最新のJavaを入れ直してみる。
このページから
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

ライセンス同意してダウンロード

インストーラに従ってインストール完了。

ターミナルで"java -version"と打つとこんな感じ。
(インストール前の確認するの忘れた。)

これでやっとADT起動した。
再度Android SDK Manager開いたらパスが以前のままだったので各SDKの再インストールは必要なかった。ラッキー。

AVD(Android Virtual Device)の作成

AVDManagerを開く。
比較用に2つ作ってみた。

Nexus5_ARM(普通のエミュレータ)

CPU : ARM
Use Host GPU

Nexus5_Intel(速いエミュレータ)

CPU : Intel Atom (x86)
Use Host GPU
こっちは最初にダウンロードしたAcceleratorとSystem Imageがないと作れないはず。

起動時間比較

AVDManager上でStartを押してからエミュレータのロック解除画面が出るまでの時間を計ってみた。

Nexus5_ARM 1回目:183sec 2回目:99sec
Nexus5_Intel 1回目:42sec 2回目:29sec
めんどいから3回以上やってないけど起動は3〜4倍速くなってるかな?
いい感じ。スクロールや画面遷移もサクサク。

動画撮ろうと思ったけど録画するとカクカクしちゃった。残念。
ただ使う分には問題なさそうなのでしばらく使ってみる。


2014年4月27日日曜日

【Android、4.x】ボタンがクリックされたときに○○する

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

ボタンをクリックしたら○○する〜というのを書いてみます。

作ってみる

プロジェクトの作成

新規Androidプロジェクトを適当に

ボタンの配置

デフォルトで作られる"activity_main.xml"を編集
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HelloWorld" />

</RelativeLayout>
これで画面上にボタンが出来る。

クリックを受け取る

ボタンなどのクリックできるクラスにはsetOnClickListenerというメソッドが用意されてる。(継承元のViewクラスのメソッドだけど。)
このメソッドの引数にView.OnclickListener型のインスタンスを渡せばOK)

やり方は2つ。

1つ目:Activity自身にOnClickListenerを実装する

こんな感じ。
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);  
  
  View btn = findViewById(R.id.btn);
  btn.setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
        Toast.makeText(this, "HelloWorld", Toast.LENGTH_LONG).show();
 }
}
MainActivity自身がView.OnclickListenerインターフェイスを継承することで
setOnClickListenerメソッドの引数に自身(this)を渡してしまおうという作戦。
クリックされたときはMainActivityのonClickが呼ばれる。

2つ目:匿名クラスを使う

MainActivityでOnClickListenerを継承するんじゃなく
メソッド内で名前を持たないクラスを書いてしまう方法
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);  
  
  View btn = findViewById(R.id.btn);
  
  OnClickListener listener = new OnClickListener() {
   @Override
   public void onClick(View v) {
          Toast.makeText(v.getContext(), "HelloWorld", Toast.LENGTH_LONG).show();
   }
  };
  
  btn.setOnClickListener(listener);
 }

}
見やすくするためにlistenerという変数を用意したけど
setOnClickListener()の括弧内に全部書いちゃう事も可能。


どっちがいいんだろうね。
自分は2の方がなんとなく好き。

2014年4月26日土曜日

【Android、4.x】テーマの切り替え

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

Androidでは各アプリのテーマを切り替えることができます。

Themes | Android Developer

デフォルトで用意されてるテーマも大量にあるっぽい。
http://developer.android.com/reference/android/R.style.html#Theme_Holo

代表的なのだと
Theme.Holo(黒いの)とTheme.Holo.Light(白いの)とか。
Theme.Holo Theme.Holo.Light

静的に決めておく

AndroidManifest.xmlにて指定すればいいみたい。
application か activity 要素に "android:theme" 属性を指定する事で指定する事でテーマを指定できる。

こんな感じ。
AndroidManifest.xmlにThemeを指定

動的に切り替える

調べてみたけど難しそうだった。とりあえず保留。そのうちちゃんと調べて書く。

2014年4月25日金曜日

【Android、4.x】アイコンあれこれ

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

いろんなところで使われてるアイコン。
Androidアプリにはいくつかルールがあるみたい。

Iconography - Android Developer

  • 起動アイコン
  • アクションバーアイコン
  • コンテキストメニューアイコン
  • 通知アイコン
  • などなど
それぞれのデザインルールやTipsが載ってる。
守らなくてもアプリは動くけど
守るとユーザビリティの優れた良いアプリになると思います。

2014年4月24日木曜日

【Android、4.x】dipとdpの違い

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

本見てたらレイアウトの単位がdipになってたんだけど
実際コーディングしてみると勝手にdpに変換された。

なんだと思ってしらべてみたら全く同じ意味だった。

参考サイト
【Android】今さら聞けない、px、sp、dip、dpの違い:湘南社中テクニカルブログ

ふむふむ

とりあえずレイアウトは
fill_parent, wrap_parent, 微調整はdp
って感じっぽいね。

spっていうのもあるみたいだけどまだ良くわかんない。

2014年4月23日水曜日

【Android、4.x】layout用XMLファイルでの@+の意味

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

本を写経しててハマった…
知ってる人が見たら当たり前だろって怒られそう。

ソースコード(エラーします)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/userIdLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@id/passwordLabel"
        android:padding="8dp"
        android:text="User ID" />

    <TextView
        android:id="@+id/passwordLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/userIdLabel"
        android:padding="8dp"
        android:text="Password" />

</RelativeLayout>

エラー内容

No resource found.....
リソースがないぞ。っと。

問題箇所

        android:layout_alignRight="@id/passwordLabel"
正しくは
        android:layout_alignRight="@+id/passwordLabel"
たぶんこれをすると2つ目のTextViewにある+は要らなくなるんだろうな。

まとめ

@+id/hogehoge
とすることでidを定義してるみたいですね。
@id/hogehoge
だと定義せず読み込もうとするのでエラーしてたんではないかと。
@id以外にも@を使った記述はよく見る気がするので近いうちに調べてまとめてみたいと思います。

2014年4月22日火曜日

【Android、4.x】最上位のViewを取得する

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

最上位のViewを取得します。

ソースコード

     Window window = getWindow();
     View view = window.getDecorView();

Decorってなんじゃ

decor : 【名】装飾物、装飾様式、飾り付け、装飾(品)
ふむ。デコレーションとかのあれか。

Android Developerみてみた

http://developer.android.com/reference/android/view/Window.html#getDecorView()

public abstract View getDecorView ()

Added in API level 1
Retrieve the top-level window decor view (containing the standard window frame/decorations and the client's content inside of that), which can be added as a window to the window manager.
Note that calling this function for the first time "locks in" various window characteristics as described in setContentView(View, android.view.ViewGroup.LayoutParams).
Returns
  • Returns the top-level window decor view.
ふむ。どういうこっちゃ。
装飾Viewってのがすでに分からんけど"top-level window decor view"が取得できるのは間違いないようです。そのうち分かるようになるかな。

2014年4月21日月曜日

【Android、4.x】ナビゲーションバーを控えめにする

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

ナビゲーションバーの表示を控えめにします。
普段のナビゲーションバー
控えめになったナビゲーションバー
分かりづらいですがホームボタンとかが薄い点になってます。
もちろん表示が変わっただけで普通に使えます。

ソースコード

     Window window = getWindow();
     View view = window.getDecorView();

     //ナビゲーションバーを控えめにする場合はSYSTEM_UI_FLAG_LOW_PROFILEを使う
     int visibility =  View.SYSTEM_UI_FLAG_LOW_PROFILE;
     //通常表示に戻すときはこっち
     //int visibility =  View.SYSTEM_UI_FLAG_VISIBLE;     

     view.setSystemUiVisibility(visibility);

まとめ

ナビゲーションバーを隠すときと同じでviewに対してsetSystemUiVisibilityしてあげるだけでいいです。簡単ですね。

2014年4月20日日曜日

【Android、4.x】ナビゲーションバーを隠す

※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

ナビゲーションバーとは画面下部に出てるホームボタンとかが表示されてるアレです。
ナビゲーションバー
これを隠します。
Youtubeとかで全画面再生するとナビゲーションバー消えますよね。そんな感じ。
消えてても画面を触れば復活します。

ソースコード

     Window window = getWindow();
     View view = window.getDecorView();

     //ナビゲーションバーを隠す場合はSYSTEM_UI_FLAG_HIDE_NAVIGATIONを使う
     int visibility =  View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

     view.setSystemUiVisibility(visibility);

まとめ

viewに対してsetSystemUiVisibilityしてあげるだけでいいんですね。

2014年4月19日土曜日

Android記事まとめ

Android系記事へのリンクです。

何番煎じか分かりませんけどAndroid関係の小ネタを自分のためにまとめていきます。(習得するためのアウトプット)
もうAndroid2.xで作るつもりはないので4.x(ICS以降)のみで動作検証していきます。

開発環境

レイアウトの基本

ステータスバー関係

ナビゲーションバー

View

Button

Theme

Google Maps

SQLite

Android Studio






【Android、4.x】ステータスバー表示/非表示切替

ステータスバーは画面上部にある通知とか時計とか出てるアレです。
ステータスバー
これを隠します。
※Android4.0以降で確認してます。それ以前で使えるかは調べてません。

ソースコード

Window window = getWindow();

//非表示にする場合
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
//表示する場合
//window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

まとめ

いいね。簡単だね。
それにしても大量の定数から一つ選ぶのだるいね。
LayoutParams.の後探すのしんどい。
どうやって選択するのが楽なんだろ。

2013年10月27日日曜日

【Unity,Android】Unable to convert classes into dex format. See the Console for details.

UnityでAndroid用にビルドしようとしたら下記エラーが出た。

Error building Player: CommandInvokationFailure: Unable to convert classes into dex format. See the Console for details.
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java -Xmx1024M -Dcom.android.sdkmanager.toolsdir="/Applications/adt-bundle-mac-x86_64-20130729/sdk/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/Unity.app/Contents/BuildTargetTools/AndroidPlayer/sdktools.jar" -

このまま長々とエラーが続くんだけど
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: 
って文が見つかる。
多重定義してんよ。って言われてるっぽい。

確かにありました。

/Plugins/Android/adfurikunSDKv2.1
/Plugins/Android/adfurikunSDKv2.1.1

片方削除して解決。

2013年8月15日木曜日

【Mac, Android】MacBookAir Mid 2013にAndroidアプリ開発環境を構築する。より簡単な方法


前回、前々回とMacBookAirにAndroid開発環境を構築してきました。
入れ終わってから気づいたんですがもっと楽な方法がありました…。

前々回→【Mac, Android】MacBookAir Mid 2013にAndroidアプリ開発環境を構築する 1/2
前回→【Mac, Android】MacBookAir Mid 2013にAndroidアプリ開発環境を構築する 2/2

EclipseとAndroidSDKが一緒になったBundle版をインストールする方法です。
というか自分が気づかなかっただけでこっちが普通だと思います…。

今から始めようとする人にめんどくさい思いをしてほしくないのでまとめておきます。

作業日
2013年8月

環境
・MacBookAir Mid 2013
・Mac OS X 10.8.4

入れるもの
・Java 7u25(Java 1.7.0.25)
・Android SDK Eclipse bundle版
※最新版は確認してね。

Javaのインストール

Javaのインストールまではこちらに書いた方法と同じです。

Eclipseのインストール

ダウンロードとインストール

http://developer.android.com/sdk/index.html
上記リンクからAndroidSDKをダウンロードします。
ライセンスに同意してダウンロードします。
ダウンロードしたファイルを解凍すると
・adt-bundle-mac-x86_64-20130729
というフォルダが出てきます。
中にはeclipse,sdkという2つのフォルダが入ってます。
このフォルダをそのままアプリケーションフォルダに移動します。
入りました。
はい、インストール終わり。
なんて簡単なんでしょう。

Eclipseを起動

Launchpadを見てみると先ほどのフォルダ名の中に
Eclipseが入っているのが分かります。

ここから起動すると下記の様なセキュリティアラートが出るので
FinderからEclipseを"右クリック→開く"から開きましょう。
こっちのがスプラッシュ画面かっこいいな
ワークスペース(ファイル保管場所)を適当に選んで完了
AndroidSDKどこだよって聞かれるので
ダウンロードしたフォルダの中のsdkフォルダを指定します
これは前回の方法でインストールしたときの名残な気がする。
まっさらなMacにBundle版を入れれば聞かれないかも。
これで完了。
Window->Android SDK Managerを開くと
最新のAndroid用SDKが含まれているのが確認できます。
他のバージョンが必要ならここから追加でダウンロード可能。

終わり。
どうぞ素敵なAndroidライフを。

最近開発環境のことしか投稿してないな…

2013年8月13日火曜日

【Mac, Android】MacBookAir Mid 2013にAndroidアプリ開発環境を構築する 2/2

引き続きMacにAndroidアプリ開発環境を構築します。
前回はこちら

・Java 7u25(Java 1.7.0.25)     →済み
・Eclipse (Eclipse Standard 4.3)   →済み
・Android SDK (Eclipseのプラグイン) 今回

Eclipseのインストールまで完了したので
AndroidSDKをインストールします。

追記2013/08/15
この記事の方法よりより簡単にインストールする方法がありました。
こちらの記事もどうぞ。
【Mac, Android】MacBookAir Mid 2013にAndroidアプリ開発環境を構築する。より簡単な方法


AndroidSDKのインストール

ダウンロード

http://developer.android.com/sdk/index.html
上記リンクからAndroidSDKをダウンロードします。
規約に同意してダウンロード
実行して解凍します
解凍すると2つのディレクトリが出てきます
sdkディレクトリをリネーム
”sdk”→"AndroidSDK_MacOSX"
リネームしたディレクトリをアプリケーションフォルダに移動

EclipseにADTプラグインをインストール

Eclipseを起動
Help->Install New Software...
Work with: に下記を入力し、Addを押す
https://dl-ssl.google.com/android/eclipse/
小さなWindowが現れるので適当な名前を付けてOKを押す。
インストールするプラグインを選択し、Next
インストール対象を確認し、Next
ライセンスを確認しながら進めていく
インストール。待ちましょう
途中でセキュリティの警告が出ることも
インストールが完了するとEclipseの再起動を求められます
Eclipseが起動するとAndroidSDKの場所が分からないと怒られます
そのままPreferencesを開く
統計情報を送るか聞かれますがそのままOK
設定画面が開いたら
先ほどコピーしたSDKのディレクトリを指定します
SDK入れなさいってウィンドウが出ますが
すでに入っているのでCancelします

Android SDKの更新

Eclipse->Window->Android SDK Manager
入れたいSDKを好きなだけ選択し
Install xx packages..を押す
ライセンスを確認し、Install
ひたすら待ちます
ダウンロードに結構時間かかります
Installedと表示されていればOK
画面を閉じて終了です

まとめ

前回から2回にわたってMacBookAirにAndroid開発環境を構築しました。
ここまで来ればあとはプロジェクトを作って端末をUSBでつなげばすぐに実行できます。
端末がない人はAVD(Android Virtual Device)でも実行できますよ。

入れたもの
・Java 7u25(Java 1.7.0.25)
・Eclipse (Eclipse Standard 4.3)
・Android SDK (Eclipseのプラグイン)

それにしてもめんどくさいですねー。
先日Xcodeを入れてみましたが簡単すぎてびっくりしました。
Androidの開発環境構築もあれぐらい楽にならないかな…
Related Posts Plugin for WordPress, Blogger...