2013年5月25日土曜日

Android StudioでRecent Projectのリストをクリアする

Android Studioでいろいろ触りまくっているとRecent Projectがいっぱいになってすごい邪魔になる。IntelliJだとRecent Projectをクリアするメニューがあるんだけど、Android Studioだと見つからなかった。なので、無理やりRecent Projectをクリアする方法をメモ。基本的にはIntelliJで無理やりやる方法と一緒。ちなみにMacね。

以下のファイルを開く
/Users/<username>/Library/Preferences/AndroidStudioPreview/options/other.xml

んで以下のあたりのrecentPathsのlistの中身を消す。
<component name="RecentProjectsManager">
  <option name="recentPaths">
    <list>
      <option value="$USER_HOME$/AndroidStudioProjects/SampleUseLibrary" />
    </list>
  </option>
  <option name="names">
    <map>
      <entry key="$USER_HOME$/AndroidStudioProjects/SampleUseLibrary" value="" />
      <entry key="$USER_HOME$/dev/github/ActionBarSherlock/actionbarsherlock-samples/fragments" value="" />
    </map>
  </option>
  <option name="lastPath" value="$USER_HOME$/AndroidStudioProjects/SampleUseLibrary" />
</component>

以下が修正後。
<component name="RecentProjectsManager">
  <option name="recentPaths">
    <list>
    </list>
  </option>
  <option name="names">
    <map>
      <entry key="$USER_HOME$/AndroidStudioProjects/SampleUseLibrary" value="" />
      <entry key="$USER_HOME$/dev/github/ActionBarSherlock/actionbarsherlock-samples/fragments" value="" />
    </map>
  </option>
  <option name="lastPath" value="$USER_HOME$/AndroidStudioProjects/SampleUseLibrary" />
</component>

2013年1月3日木曜日

Androidで「Unknown error merging manifest」

AndroidでライブラリプロジェクトのAndroidManifest.xmlをメインプロジェクトに自動でマージさせるにはproject.propertiesにmanifestmerger.enabled=trueを加えるだけで良い。 しかし、メインプロジェクトのandroid:targetSdkVersionがライブラリプロジェクトより低いと以下のようなエラーメッセージが表示される。
Unknown error merging manifest
もっとわかりやすいメッセージを表示してほしいよね。

2013年1月2日水曜日

GradleでSlim3 + JPPのビルドスクリプトを書いてみた

Android(アプリ)も新しいビルドシステムとしてGradleを採用したこともあって、流行りに流行りまくっているGradleを試してみた。とりあえず会社でよく使うSlim3 + JsonPullParserのビルドスクリプトを書いてみた。

Gradleでaptを処理する場合はAntタスクを使うらしい。そんでもってSlim3はJava1.5のaptでJPPはJava1.6のaptを使う必要があるらしいので、これまためんどい。

実はこれ、javacのバグによってエラーメッセージが誤って報告されるので気持ち悪い。
もっと良い方法があったら誰か教えて(´・ω・`)

参考資料)

2012年6月3日日曜日

さくらVPSのUbuntu10.04(64bit)にgitolite(g3)をインストール

Ubuntu11ならaptitudeで簡単にインストール出来るみたいだけど、
Ubuntu10.04の場合、アレコレちょっとめんどかったのでインストールログを残しておくことにした。
(それとg3のインストール方法を紹介している日本語のサイトがなかったという理由も)

git-coreのインストール


$ sudo apt-get install git-core

セットアップ準備


1人目のgitolite管理者ユーザーの鍵を予め作成しておく。
$ ssh-keygen -t rsa

gitoliteユーザーを作成する。
$ sudo adduser gitolite

gitoliteユーザーから参照出来る場所に公開鍵を配置する。(あとで削除してね)
$ cp -p .ssh/id_rsa.pub /tmp/ubuntu.pub

gitoliteのインストール / セットアップ


gitoliteユーザーで行う。
$ sudo su - gitolite

githubからクローン
$ git clone git://github.com/sitaramc/gitolite

gitoliteインストール
$ gitolite/install

gitoliteのセットアップを行う。(WARNING出るけど気にしない)
$ export PATH=$HOME/gitolite/src:$PATH
$ gitolite setup -pk /tmp/ubuntu.pub
$ exit

管理用リポジトリをクローン


セットアップ時に指定した公開鍵のユーザーで管理用リポジトリをクローンする。
 (ここでは同サーバなのでlocalhost)
$ git clone gitolite@localhost:gitolite-admin.git

リポジトリを追加する場合はgitolite-admin/conf/gitolite.conf にrepoを追加してプッシュするだけ。 
ユーザーを追加する場合はgitolite-admin/keydir配下に公開鍵を 追加してプッシュするだけ。 
これでリポジトリを追加する作業がgitosisより楽になったー

2012年5月18日金曜日

さくらVPSのUbuntu10.04(64bit)にgit + maven + Jenkinsな環境構築をしてAndroidのCIが出来るまでのメモ

Androidに限らずgit + Jenkins + mavenな環境はよく使うと思うけど、初回のビルドはだいたいこける。
環境が整備出来ていないという理由でね。
ということでAndroidプロジェクトがCI出来るまでにやったことをメモしておく。

Ubuntuインストール・設定


さくらVPSにカスタムOSのUbuntu 10.04をインストール+セキュリティ設定などをした時のメモ
を参考にインストール・設定を行う。
(ここではsshのport変更はやってない)

Jenkinsインストール


Jenkinsをインストールするとjenkinsユーザーが自動で作成されるけどなんとなく先に作っておいた。
$ sudo adduser jenkins
インストールはここを参考に行う。

ビルド環境構築


openjdk-6-jdkとmavenをインストールする。
$ sudo apt-get install openjdk-6-jdk
mavenインストールはここを参考に行う。

Android SDKインストール


まず、32ビット版のソフトを動かすためにia32-libsをインストールする。(ハマりポイント)
$ sudo apt-get install ia32-libs

jenkinsユーザーから実行出来るようにする必要があるのでjenkinsユーザーで行う。
$ mkdir -p /var/lib/jenkins/tools
$ cd /var/lib/jenkins/tools
$ wget http://dl.google.com/android/android-sdk_r18-linux.tgz // バージョンは適宜変更
$ tar zxvf android-sdk_r18-linux.tgz
$ ./android-sdk-linux/tools/android update sdk -u

gitosisインストール・設定


まず、gitosisをインストールする。今までapt-getで今回はaptitudeだけど気にしないw
$ sudo aptitude install gitosis

gitosisの初期化の際に一人目の管理者の公開鍵が必要なのでgitosisユーザーから見える箇所に配置する。
(ここでは同サーバー内のubuntuユーザーを一人目の管理者とする)
$ cp -p /home/ubuntu/.ssh/id_rsa.pub /tmp/.
$ sudo su - gitosis
$ gitosis-init < /tmp/id_rsa.pub

gitリポジトリ作成


gitosis管理者ユーザーで管理情報リポジトリをクローンする。(クローン済みならpullする)
$ git clone gitosis@ホスト名:gitosis-admin.git

gitosis.confを修正する。(XXXXは任意ユーザー)
[gitosis]
loglevel=DEBUG

[group gitosis-admin]
writable = gitosis-admin
members = XXXX

[group リポジトリ名]
writable = リポジトリ名
members = XXXX jenkins

修正が終わったらjenkinsユーザーのssh公開鍵をkeydir配下に配置する。
(ssh公開鍵はパスフレーズなしで作成)
コミットしてプッシュしたら実際にリポジトリを作成する。
$ cd /srv/gitosis/repositories
$ sudo mkdir リポジトリ名.git
$ cd リポジトリ名.git
$ sudo git init --bare --shared=true
$ sudo chown -R gitosis:gitosis ./

jenkinsユーザーまたはmembersに記載した任意のユーザーから以下コマンドを実行してクローン出来ることを確認する。
$ git clone gitosis@ホスト名:リポジトリ名.git

Jenkinsセットアップ


jenkinsユーザーがGitリポジトリと通信するためknown_hostsに追加する必要がある。(重要)
(ここではGitリポジトリとJenkinsが同サーバ)
$ sudo -u jenkins ssh gitosis@localhost // yesを答える

続いてクローン時に必要になるgitconfigの設定を行う。
$ sudo su - jenkins
$ git config --global user.email "jenkins@jenkins-server"
$ git config --global user.name "jenkins"

http://your-jenkins-server:8080にアクセスする。
Jenkinsの管理 -> プラグインの管理から以下の3つを選択してインストールする。
  • Git plugin
  • Android Emulator Plugin
  • Android Lint Plugin
続いてJenkinsの管理 -> システムの設定から以下を設定する。
  • Android
    • Android SDK root : /var/lib/jenkins/tools/android-sdk-linux
  • Maven
    • Name : Default(任意)
    • MAVEN_HOME : /usr/local/maven

ビルドしてみる


上記で作成したリポジトリにプロジェクトを追加してプッシュする。
android-archetypesのandroid-with-testを使用してプロジェクトを作成する。
正常に作成出来たらリポジトリにプッシュする。(Jenkinsからクローン出来るように)
mvn archetype:generate \
  -DarchetypeArtifactId=android-with-test \
  -DarchetypeGroupId=de.akquinet.android.archetypes \
  -DarchetypeVersion=1.0.8 \
  -DgroupId=your.group \
  -DartifactId=your-project-name \
  -Dpackage=your.package

http://your-jenkins-server:8080にアクセスし新規ジョブ作成よりMaven2/3プロジェクトのビルドのジョブを作成する。

ソースコード管理システムでGitを選択し、Repository URLにgitosis@ホスト名:リポジトリ名.gitを入力する。

ビルドのルートPOMにリポジトリから見たルートのpom.xmlのパスを入力する。
ゴールとオプションにinstallを入力する。
ビルド環境の"Run an Android emulator during build"にチェックを入れ、エミュレーターの設定項目を入力する。
"Show emulator window"のチェックを外す。(重要)
ビルド後の処理の追加をクリックして成果物を保存を選択する。
保存するファイルにメインプロジェクトのapkを指定すればいい。
保存、ビルド実行して"Finished: SUCCESS"がコンソールに出力されればOK。
最後に成果物としてapkが存在していれば完了〜

2012年3月6日火曜日

android-maven-pluginのライフサイクル

android-maven-pluginのcomponents.xmlで定義されているライフサイクルを表にまとめてみた。

packagingがapkの場合(通常のAndroidアプリケーション)


phase goal
generate-sources android:generate-sources
process-resources resources:resources
compile compiler:compile
process-classes android:proguard
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
prepare-package android:dex
package jar:jar, android:apk
install install:install
pre-integration-test android:internal-pre-integration-test
integration-test android:internal-integration-test
deploy deploy:deploy

packagingがapklibの場合(Androidライブラリ)


phase goal
generate-sources android:generate-sources
process-resources resources:resources
compile compiler:compile
process-classes android:proguard
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar, android:apklib
install install:install
deploy deploy:deploy

components.xml見るとprepare-packageフェイズでandroid:emmaを呼び出しているように見えるけど
android:emmaゴールなんて見つからんぞー!?

2012年3月4日日曜日

MacOS XにIntelliJとmavenで開発環境構築しようと思ったら...

Mavenとの相性が良いというのを聞きつけてIntelliJを使い始めてそっこーエラーに遭遇。
Maven Moduleからarchetypeを選択してプロジェクトを作成しようとするとコンソールらしきところに
[FATAL_ERROR] Cannot start Maven: No valid Maven installation found. Either set the home directory in the configuration dialog or set the M2_HOME environment variable on your system.

環境変数のM2_HOMEが設定されてないよ的なメッセージが表示される。
.bash_profileに設定して読み込んでIntelliJを再起動してみても変わらず。
色々調べた結果、Mac OSのアプリケーションはbashで設定してる環境変数は読めないということがわかった。

解決方法


/etc/launchd.confを作成
sudo vi /etc/launchd.conf

内容
※ /usr/share/mavenの箇所は適宜読み替えて
setenv M2_HOME /usr/share/maven

Mac再起動
〜終わり〜