Androidの開発環境を作り直した
はじめに
たまに挙動がおかしい時があったんだけど、原因がイマイチわからないので作り直してみた。
環境はMacOSX10.7.4
その前に
AppCleanerでEclipseを削除した後、一応ホームディレクトリの二つのディレクトリ名を適当なものに変更
二つとも環境構築している中で作り直されました。
※参考:eclipse(mac)の再インストール - いろいろつまみ食い
環境構築
古い記事だけどわかりやすかったので参考にさせてもらいました
Android開発環境の構築 Eclipse編
Android SDK
- Android SDK | Android DevelopersからSDKをダウンロード
- 展開して~/Developer直下に配置
JDK
- インストールしてあるのでスルー
Eclipse
- Eclipse DownloadsからEclipse IDE for Java Developersをダウンロード
- 展開して~/Applications直下に配置
- Eclipse 日本語化 | MergeDoc Projectから、Pleiades プラグイン本体のみをダウンロード(All in Oneじゃないよ)
- Eclipse 4.2 Juno の場合は 1.3.5 以上を~とあったので安定板でなく最新版の1.3.5
- 展開したものをEclipseインストールディレクトリにマージする
- Eclipseアプリケーションのパッケージ内にあるeclipse.ini末尾にパスを追記
- -javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
- フルパスじゃないとEclipseが起動しなかった
- eclipse.iniを閉じてからEclipse起動
- 不安になったのでもう一回閉じてから、パッケージ内のeclipseバッチを叩いて起動
- ./eclipse -clean
- [ヘルプ] - [新規ソフトウェアのインストール]選択
- 作業対象を追加
- 名前
- Android Plugin
- ロケーション
- 名前
- 開発ツール、NDKプラグイン共にチェックをつけインストール
- [Eclipse] - [環境設定]からAndroidを選択し、SDKロケーションに~/Developer直下に配置したAndroid SDKのルートディレクトリを設定
- [ウィンドウ] - [Android SDK マネージャー]で、色々インストール
- Tools
- Extras
- 今作ってるアプリが対応しているバージョンのAndroid全部
- プロジェクトインポートして、実機を繋げて起動、問題なし
- と思ったらlayout系のxmlが開けなかったのでもう一回clean起動、プラグイン入れたり更新したら必ずcleanするのが良さそう
テスト用プロジェクト内のリソースを参照する方法
はじめに
AndroidTestCaseを継承したクラスでAssets内のファイルを参照しようとしたらエラーになってしまうので解決策をメモ
解決編
- 医療情報事務所 一貫堂Blog: AndroidTestCaseを継承したテストケースでテストプロジェクト内のリソースを利用
- まさにそのままの問題でした。ありがとうございます。
AndroidTestCaseにはテスト用のContextを取得するためのAPIはあるようですが、hiddenらしくリフレクションで取得しています。一応、いくつかのクラスでリソースのアクセスを行いたいのでクラスを分けてAndroidTestCaseを外から渡すようにしてみました。ちなみにAndroidTestCase内にこのコードを書く場合には参考URLのようにgetTestContext以外の名前にしないとhiddenであるgetTestContextと名前がかぶっておかしくなります。
public class Utils { /** * テスト対象プロジェクトのAssetsフォルダを参照する場合はこれを使う * @param testCase * @return */ public static Context getTestContext(AndroidTestCase testCase) { @SuppressWarnings("unchecked") Class clz = testCase.getClass(); Method method; try { method = clz.getMethod("getTestContext"); return (Context) method.invoke(testCase); } catch (Exception e) { return null; } } }
例
// assets内 Utils.getTestContext(this).getAssets().open("json/test.json"); // res内は使わないぽい getContext().getString(R.string.test)
startActivityForResultの直後にonActivityResultが呼ばれてしまう
はじめに
表題通りです。
解決編
Lance Nanekさんのコメントの通り、Manifestで移動先activityに設定されているlaunchModeがsingleTaskとなっていたのが原因でした。そもそもこの画面がsingleTaskである意味もわからなかったので単純に削除することで対応。
ただ、singleTaskにしているとonActivityResultが呼ばれる理由は結局よくわからない。singleTask指定にすると起動方法が変わって、呼び出し側画面に終了通知的なものが行くのだろうか。
理由とか書いてない記事ですんまそん
ダイアログ表示時に下の画面を暗くしない
styles.xml
<style name="CustomDialog" parent="@android:style/Theme.Dialog"> <item name="android:backgroundDimAmount">0.0</item> </style>
AndroidManifest.xml
<activity android:name=".com.murakaming.ExampleActivity" android:configChanges="keyboardHidden|orientation" android:theme="@style/CustomDialog" />
ちなみに
自分の例ではactivityにかぶせてますが参考urlではダイアログ生成時にスタイル渡してますね、自由度高そうです。
タイムアウトエラーが起きやすい問題を直した
「勝ち続ける意志力」読了
- 作者: 梅原大吾
- 出版社/メーカー: 小学館
- 発売日: 2012/04/02
- メディア: 新書
- 購入: 24人 クリック: 449回
- この商品を含むブログ (71件) を見る
はじめに
しょうがないと思いつつも、一般向けに強く書かれたことを残念に思ってしまいました。プレイヤーにしかわからないようなネタを含めつつ、対戦状況による意識配分の話とか、もっとゲームに寄った話が聞きたかったなぁというのが本音です。
ただ、噂で語られてた部分もある梅原さんの人生とか、心の移り変わりだとかを梅原さん自身が語ってる貴重な聖書なので、とりあえずプレイヤーは日々の感謝を表すために買うといいんじゃないかな。薄いからランクマの合間とかに読めばいいよ。以下少ないけど抜粋と感想。
真似できない強さ
p.118
10を超えた強さは、もはや教えることもできなければ誰も真似することもできない。おそらく、何が違うのか気づかない人が大半だ。誰もが真似できる10の強さとは次元が違う。 「アイツの強さはなんだ? なんとなく強いのは分かるけど...」 そんな印象を持つのではないだろうか。 自分だけにしかわからない努力で11、12、13の強さを手にした人間は、絶対の自信を自分のうちに宿すことができる。その自信は決して揺るがない。 何が違うのか、どこが強いのか。周りの人間が明確にその違いを指摘できない状態にまで持っていければ、そのゲームで負けることはない。
ここで言ってる10の強さというのは流行のスタイルだとか型にハマった強い戦法だとかを取り入れてたどり着ける限界っていう意味みたいです。
この限界を超えた地点っていうのは自分も強く感じていて、トッププレイヤーは"これをやってるから強い"なんてわかりやすいのは無く、下手したらコンボの技術はそんなに変わらない人だっています。
個人的には、一流プレイヤーが*1この10より上のラインを意識して日々の練習に取り組んでることがなんか嬉しいなと。
量ではなく質
p.187
たった2円の小さな発見でも、それを自分の成長と考えられる心があれば、「生活が良くなった」と笑って、明日も頑張ることができる。 逆に「15時間も頑張ったのに、結局は何も見つからなかった」というのが一番いけない。気持ちが暗くなり、自己嫌悪に陥り、モチベーションを保てなくなる。 だいたい、あまり多くのものを1日1日に求めたところで、それほど簡単に見つかるものでもない。
たった2円ってなんだよ思われるかもしれませんが、そこは正直どうでもいいです。大切なのは少しずつ進んでいることを毎日実感し、モチベを維持することだと神様は説いています。前後が無いのは手動で書き写すのが面倒なだけです。
さくらVPS申し込み〜SSHするまで
はじめに
- Linux知らない
- 開発環境作れない
- 気軽にアプリ出せるような場がない
というないないづくしな私ですがこの度さくらVPSを契約してみました。これで遊び倒して「昨日話してたアプリのアイデア面白かったから今日リリースしたわー、とりま自分の仮想専用サーバーでリリースしたわー」とか、「ローカルにしか開発環境ないとすぐにリリースできなくない?」とか、「俺が昨日自分の仮想専用サーバーのセキュリティ高めた話ってもうしたっけ?」とか言えるようになりますね。2週間の無料お試し期間もあってとてもいいと思います。以下作業ログ。
参考
申し込み
- 申し込み完了
- 仮登録完了メール受信
- メールにあるURLでコントロールパネルへ行きIPとパスワード打ち込んでログイン
# cat /etc/redhat-release CentOS release 6.2 (Final)
ユーザを作る
- コンパネの[仮想サーバ操作]から[起動]ボタンを押す
- ステータスが稼働中になる
- コンパネの[リモートコントロール]を押す
- CentOSがカタカタと動いたあと、ログインを求められる
- rootで入り、パスワードを求められるのでコンパネにログインしたのと同じパスワードを入力
- ログイン
- rootは権限が強すぎて怖いのでそうでもない権限をもつユーザを作成
- ユーザのホームディレクトリもこれで作成される
# useradd murakaming
- パスワード設定
- passwdコマンドは予測されやすかったり短かったりするパスワードに警告出してくれる
# passwd murakaming
# su - murakaming
- とりあえず作っただけなのでrootに戻る
- rootに戻る場合はハイフンの後指定なし
- 元のユーザに戻る場合はexitを使う、この場合は同じくrootに戻る
$ su -
セキュリティ設定の準備
- 自分のユーザを管理グループであるwheelに入れる
- 後でrootになれるユーザをグループで制限する
- -Gオプションは入るグループをカンマ区切りで繋げれて、ここに含まないグループからは削除される
# usermod -G wheel murakaming
- wheelグループは最初からあって、rootはそこに属しているみたい
# cat /etc/group | grep wheel wheel:x:10:root
・後でMacからSSHでファイル転送(scp)するためにsshd起動
# /etc/init.d/sshd start
Macから鍵を用意(公開鍵暗号方式)
- ターミナルで鍵生成
$ ssh-keygen -t rsa
- 読み書きできるようパーミッション設定
- パーミッションについてはLinuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)の46pを見た
$ chmod 600 ~/.ssh/id_rsa.pub
- 公開鍵を名前を変えて転送する
- 複数端末からアクセスする場合はauthorized_keysに公開鍵を追加するらしい
$ scp ~/.ssh/id_rsa.pub murakaming@:~/.ssh/authorized_keys
セキュリティ設定
- 設定ファイルを開く
# vi /etc/ssh/sshd_config
- ポート番号変更
Port
- ルートログイン禁止
PermitRootLogin no
- パスワードでの認証なし(公開鍵認証のみ)
PasswordAuthentication no
- sshの認証を公開鍵認証だけにしたい時にUsePAMの設定をどうすべきか: よしなしごと
- ChallengeResponseAuthenticationはデフォルトでnoだったけど一応
UsePAM no
- 設定が終わったのでsshdを再起動
# /etc/init.d/sshd restart
sudoを使えるようにする
- 次のコマンドがroot権限じゃないと駄目みたいなので一旦rootへ
$ su -
- sudoコマンドのための設定ファイルを開く
- "%wheel ALL=(ALL) ALL"という行のコメントを外す
- これでwheelに所属しているユーザがsudoできる
- "%wheel ALL=(ALL) ALL"という行のコメントを外す
# visudo
- murakamingに戻る
# exit
- sudoを試してみる
- パスワードはmurakamingのものを入力
$ sudo visudo
お疲れさまでした
$ logout