2012年7月13日金曜日

お買い物アプリを Google Play で公開してます

android 用スマホアプリとして、お買い物メモを公開しています。
Google Play - 何買う?

我ながらイマイチなアプリ名ですが、スーパーに頻繁に買い物をする奥様で、
「とにかく買うものをリストできるればいい!」という方であれば、便利に使ってもらえるんじゃないかと思います。


差別化のポイントとしては、以下の4点です。
  • 商品の写真が大きく表示されるので見やすい。
  • 商品の写真は Google 検索で好きなものを選択できます。イチイチ撮影しなくていいです。
  • 履歴機能があるので、よく買うものは、履歴から登録することができます。
  • そろそろ買うものと思われるものを候補リストで表示します。
    (2回以上、購入履歴があるものは、購入間隔から次の購入予定日を推測)


比較的?アプリの更新をしていますので、ドシドシダウンロードが増えるとうれしいな~と。

これを見て、「ダウンロードしてやるぜ」 という奇特な方をお待ちしています。


2012年5月9日水曜日

ProGuard が勝手にコンストラクタを削除した件

難読化ツールと言うくらいなので、てっきり難読化だけするのかと思いきや、
ProGuard さんは不要(と判断した)メソッドやフィールドの削除も行います。

・・・ということを、本日知りました(汗

そもそも、なんで本日知ったかというと、
android.view.View を派生した ColorPickerView というクラスを作成していたのですが、
ProGuard を使うと、以下のような Exception が発生することに気づきました。

android.view.InflateException: Binary XML file line #110: Error inflating class jp.xxx.yyy.zzz..ColorPickerView

layout フォルダにあるレイアウトファイル (XMLファイル) に、
自作したColorPickerView を記述していたのですが、
こんなクラスはないよ、と言いがかりつけらています。

ProGuard を使わないと、言いがかりはつけられません。

なんで・・・?と調べていたところ、
ProGurad の削除機能でコンストラクタが削除されていることに気づいた、というわけです。


ProGuard をよく知らずに使っていた自分が悪いと言えば悪いんですが、
そんな危ない機能はデフォルトでオフにしておいたほうがいいんじゃないですかね。
(自分だけの非にはしたくない気分です)

ProGuard が生成するテキスト・ファイルのなかに、usage.txt というファイルがあるのですが、
このファイルには、ProGuard によって削除されたメソッドやフィールドが記録されます。

まあ、こんなテキスト・ファイルの意味なんかも分かってなかったんですが、
この中に、自作の ColorPickerView のコンストラクが含まれていて、

「おれのコンストラクタが削除されてるーーー」 

となったわけです。


で、回避策ですが、

元々、以下のような 3 つのコンストラクタがあったので、

package jp.xxx.yyy.zzz;

public class ColorPickerView extends View {

public ColorPickerView(Context c) {
super(c);
}

public ColorPickerView(Context c, AttributeSet attrs) {
super(c, attrs);
}

public ColorPickerView(Context c, AttributeSet attrs, int defStyle) {
super(c, attrs, defStyle);
}

(省略)

}


proguard.cfg に以下の記述を追加しました。

-keep public class  jp.xxx.yyy.zzz..ColorPickerView  {
    public <init>(android.content.Context);
    public <init>(android.content.Context,android.util.AttributeSet);
    public <init>(android.content.Context,android.util.AttributeSet,int);
}

これでコンストラクタは 3 つとも削除されなくなりました。

<init> はコンストラクタを指しています。

詳細は、本家の Usage でもご参照下さい。

本家の Usage - http://proguard.sourceforge.net/index.html#manual/usage.html

2012年3月28日水曜日

android.bat が起動しないので、こんな回避策を実施してみました

最近、ノートPCを新調して、android 開発環境を導入していたところ、
android.bat が起動しない現象にぶつかりました。

c:\myprog\android-sdk-windows\tools> android.bat
Failed to convert path to a short DOS path: C:\Windows\SYSTEM32\java.exe

ERROR: No suitable Java found. In order to properly use the Android Developer
Tools, you need a suitable version of Java JDK installed on your system.
We recommend that you install the JDK version of JavaSE, available here:
  http://www.oracle.com/technetwork/java/javase/downloads

You can find the complete Android SDK requirements here:
  http://developer.android.com/sdk/requirements.html


c:\myprog\android-sdk-windows\tools>

android.bat の内部で、lib\find_java.bat を呼び出しており、
その処理を見ると、同じフォルダにある find_java.exe で java_exec 環境変数がセットされていない模様。

原因はさっぱり分かりません。

lib\find_java.bat を編集し、以下の 2 行を追記したところ、とりあえず、android.bat が起動するようになりました。
(java.exe、javaw.exeが存在するフォルダ名は適宜読み替えて下さい)
set java_exe=C:\myprog\Java\jdk1.6.0_30\bin\java.exe
set javaw_exe=C:\myprog\Java\jdk1.6.0_30\bin\javaw.exe