SyntaxHighlighter

2016年1月3日日曜日

Android Studio 1.5.1 の gradle が腐っている?

ほぼ1年ぶりにAndroid Studioを触ることになり、v1.0 → v1.5 に一気にアップグレードしたら、既存のプロジェクトがビルドできなくなりました。ログ見てみると、プロジェクトのビルド以前のGradleの準備段階でエラーになっているっぽい。
2016-01-03 15:30:41,259 [1812717] INFO - .project.GradleProjectResolver - Gradle project resolve error org.gradle.tooling.GradleConnectionException: Could not run build action using Gradle distribution 'https://services.gradle.org/distributions/gradle-2.8-all.zip'.
(中略)
Caused by: java.lang.NoSuchMethodError: com.google.common.io.CharSource.readLines(Lcom/google/common/io/LineProcessor;)Ljava/lang/Object;
at org.gradle.configuration.DefaultImportsReader.(DefaultImportsReader.java:40) 
(後略)
NoSuchMethodErrorなので、何かのJARが古いんだろうと当たりをつけて捜索開始。
com.google.common = guava の最新を探すと、v19が最新。
https://github.com/google/guava/wiki/Release19

なお、CharSource.readLines(LineProcessor)は、v16で追加されたようだ。
http://upstream.rosalinux.ru/java/compat_reports/guava/15.0_to_16.0/bin_compat_report.html

自分のMac上の古い guava.jar を片っ端から、v19に置き換えるが、なおらない。

しばらく考えて、Android Studio.app が guava.jar を内包している可能性に思い至り、再捜索。いくつか見つかったのですが、結論としては、このヒト↓が犯人。
/Applications/Android Studio.app/Contents/gradle/gradle-2.8/lib/guava-jdk5-17.0.jar
v17だから、readLines(...) を実装してるはずなんだけどなぁ。JDK5向けのポーティング時にミスっちゃったんだろうか。

本当は、このファイルを削除し guava-19.0.jar を置いて解決したかったけど、AndroidStudio様がファイル名固定で guava-jdk5-17.0.jar を参照していたので、guava-19.0.jar → guava-jdk5-17.0.jar とリネームして置きました。

これでビルドも通るようになり、一件落着です。
ちょっと副作用が心配。。。







2013年10月7日月曜日

IOSツールバーのボタン画像のアルファ


PNG形式の透明度がない普通の画像(original.png)があるとします。
これを、ツールバーのボタン画像にする方法を書きます。(MACで)

0.準備:netpbmというツールを使うのですが、それを簡単にインストールするための、homebrewをインストールします。
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

0.準備:netpbmをインストールします。
$ brew install netpbm
途中、マニュアルページのフォルダのアクセス権が無いと怒られるので、
アクセス権を追加します。
$ sudo chmod 775 brew /usr/local/share/man/man3
また、途中、linkされていないとエラーが出ることがあります。
その場合、下記コマンドで link させたうえで、再度 install コマンドを実行します
brew link libtiff libpng
$ brew link libtiff libpng

1.MAC標準の「プレビュー」でカラー画像をグレースケールにします。
メニューのカラー調整を選び、彩度を最小にするとグレースケールになります。
grayscale.png として保存します。

2.PGMフォーマットに変換する。
$ pngtopnm grayscale.png | ppmtopgm > grayscale.pgm

3.同じサイズの真っ黒な画像を作ります。
$ pgmmake 0 40 40 > black.pgm
4.真っ黒PGM画像からPNG画像へ、pnmtopngコマンドでフォーマット変換する。
このとき、グレースケールPGM画像をアルファチャンネルにするようオプション指定する

$ pngtopnm -alpha=grayscale.pgm black.pgm > aplha.png

2013年10月4日金曜日

クロス開発してみよう!Cordovaに転向した

Phonegap から Cordova に転向しました。Cordova のほうがこまめにバージョンアップしているのと、v3に関しては Cordova のほうが世間の情報が多いからです。
以下のとおりインストールしました

2013年9月21日土曜日

クロス開発してみよう!PhoneGap3+jQuery.ajax+iOS でハマった

公開状態にした Google Spreadsheet からデータを取得しようとして下記のコードを書いた。
<script>
$(document).ready(function(){
 // ドキュメントを開いた時にボタンクリックのハンドラを登録
 $("#button").click( function() {
  $.ajax({
   url: "http://spreadsheets.google.com/feeds/cells/xxxxxxxxxx/1/public/basic",
   dataType: "jsonp",
   data: { "alt" : "json-in-script" },
   success:  function(data) { alert("成功"); },
   error: function(xhr, options, error) { alert(error); }
  });
 });
});
</script>

何が問題?

Mac上のChromeやSafariでは問題なく動作する
しかし PhoneGap → iPhone Simulator で動かすと ajax()を呼んだ直後に error callbackが呼ばれる。
errorのメッセージは、「JQuery8888888_88888 was not called」みたいな感じ。 

修正(回避?)方法

結論からいうと、PhoneGap3の場合、次のようにすると直った 
  1. iPhone Simulator上の古いアプリを削除する 
  2. platforms/iosフォルダを削除する 
  3. www/config.xml の中の accessタグを探して <access origin="*" /> に変更する
  4. ビルドして実行

注意!

  • PhoneGap2のときは、platforms/ios/AppName/Cordova.plist を編集すればOKだったみたいだが、PhoneGap3ではそのファイルは無くなっている
  • セキュリティを考慮して、<access origin="*.google.com" /> のようにアクセス先を限定すると動作しない。要調査だがひとまず保留。 

2013年8月31日土曜日

クロス開発してみよう!PhoneGap3でサンプル動かしてみた


1.プロジェクトの最初に1回だけやること

プロジェクトを作りたいフォルダに移動してプロジェクトを新規作成する
$cd my_projects/
$phonegap create sample_app

これで my_projects/sample_app の下に4つのフォルダが出来る
  • mearges
  • platforms
  • plugins
  • www

このうち www 以外は空っぽ。wwwの下にはサンプルのHTML等ができている。これを編集してアプリを開発していく。

2.動かす

次のコマンドを実行すると、ビルド → iOSシミュレータ起動 → アプリ転送 → アプリ起動まで連続的に実行されます。
$cd sample_app
$phonegap run ios

iOSシミュレータにこんな画面が出れば成功です。

また、初めてビルドしたときに sample_app/platforms/ios の下に Xcode プロジェクトやObjective-Cのソース等が自動生成されます。
また、ビルドするたびに
  sample_app/www
    ↓
  sample_app/platforms/ios/www
が自動生成(上書き)されます。
なので sample_app/platforms/ios/www 以下は手でいじっちゃダメです。

3.編集して再実行

試しに少し編集して反映されることを確認します。
sample_app/www/js/index.js の40行目付近に alert文を追加します。

  1.     // Update DOM on a Received Event. 
  2.     receivedEvent: function(id) {
  3.         alert('改造しました'); // この行を追加

再ビルドして実行します
$phonegap run ios

こんな画面が出れば成功です



クロス開発してみよう!PhoneGap3をいれてみた

これまで、Android版はEclipse+ADT、iOS版はXcodeで、それぞれネイティブアプリを開発してきました。そろそろクロス開発してみようってことで、PhoneGapの最新版3.0をインストールしたので、手順を公開します。

他にもクロス開発のプラットフォームはありますが、PhoneGap以外はゲームに特化したものばかり?でした。私はゲームを作らないので、まっとうに HTML5 + CSS3 + JavaScript っぽい PhoneGap を選びました。

0.環境の選択

まず環境の選択ですが、WindowsではiOS版をデバッグできないので、Macに環境を作ることにします。

1.初期状態


Macには次のものがはいってる状態です。

  • OS:MountainLion 10.8.4
  • Xcode:4.6.3 ( + command line tools )
  • ruby:1.8.7 ← いついれたか覚えてない。。。 gitを入れたときかも?

2.Node.js

PhoneGap3をインストールするのにnpmコマンドを使いますが、それを含んでいるのがNode.jsです。Webサイトへ行き、INSTALLボタンを押すと .pkgファイルがダウンロードされるので、開いてインストールします。
インストール完了後、ターミナルで下記コマンドを実行してバージョンが表示されればOKです。
npm -v

3.PhoneGap 3.0

ターミナルで次のコマンドを実行します。通信状況次第ですが、調子が良ければ数分で完了します。
sudo npm install -g phonegap

インストール完了後、ターミナルで下記コマンドを実行してバージョンが表示されればOKです。
phonegap -v

4.ios-sim

次にXcodeを起動せず、phonegapから直接 iOSシミュレータを起動してデバッグする環境(ios-sim)を整えます。

4.1. Java(JRE)

ターミナルで下記コマンドを実行します。
java -version

Javaが入っていなければ、「今すぐインストールしますか?」みたいなメッセージがでるので、そのままインストールします。
インストール完了後、ターミナルで上記コマンドを実行してバージョンが表示されればOKです。

4.2. Homebrew

OS Xのためのパッケージマネージャーだそうです。 ios-simのインストールに便利なので入れます。
ターミナルで下記コマンドを実行します。途中、管理者パスワードを聞かれます。
ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)

インストール完了後、ターミナルで下記コマンドを実行してバージョンが表示されればOKです。

brew -v

4.3. ios-sim

ターミナルで下記コマンドを実行します。
brew install ios-sim

ここまでで必要なもののインストールは完了です。
次はサンプルを動かすまでを説明します。



2013年5月6日月曜日

Androidアプリ開発のフォルダ構成

Androidアプリの開発はこんな構成でやっています。

構成のポイント

  • 環境は、Windows、Eclipse、GitGUI です。
  • Eclipseのプロジェクト(Androidのアプリ、ライブラリ)の単位でレポジトリを作ります。
  • 共同開発しないので、リモートレポジトリは、自分のPC上に置きます。
  • HDDクラッシュに備え、リモートレポジトリ場所を丸ごとクラウドストレージ(SkyDrive)に同期保存します
    ローカルレポジトリ場所は、作業場所と混在していて雑多なゴミが含まれるので、リモートレポジトリだけ保存します。
  • 作業場所は、Eclipseでワークスペース・フォルダーに指定しています
    「ファイル」→「ワークスペースの切り替え」→「その他」

新しいプロジェクトを加える際の手順

作業場所

EclipseでAndroidアプリのプロジェクトを新規作成します
C:\Users\username\localrepos\ProjectX

ローカルレポジトリ

Git GUIの起動画面で「新しいレポジトリを作る」を選び、新しいプロジェクトフォルダを指定する


すると、新しいローカルレポジトリが作成されます。
C:\Users\username\localrepos\ProjectX\.git

リモートレポジトリ

Git GUIで作成したローカルレポジトリを開きます。
「リモート」→「追加」を選び、ダイアログで下記のように入力して追加します。


すると、新しいリモートレポジトリが作成されます。
C:/Users/username/SkyDrive/repos/ProjectX.git