Quick電話帳.Ver5.5.0を公開しました

テキストのアルファ値(透明度)を設定できるようになりました

Quick電話帳/Ver5.4.0を公開しました

Ver5.4.0
・連絡先に関係データの表示を追加しました
・ウィジェットにSkypeを追加しました
・レイアウト拡張機能に文字サイズを変更できる設定を追加しました
・talkに対応しました

Quick電話帳/Ver5.3.0を公開しました

Ver5.3.0
・検索ビューで初期表示時に自動検索する設定を追加しました
・ドコモ連絡先のグループなし表示がおかしい不具合を修正しました
・フォントダウンロード処理を通信料を少なくするよう修正しました

Quick電話帳/Ver5.2.0を公開しました

Ver5.2.0
・1ライン表示時に罫線を表示するようにしました
・グループウィジェットからGoogle+StreamViewが表示されるようになりました

Quick電話帳/Ver5.1.0を公開しました

Ver5.1.0
 ・ウィジェットのフォントサイズを選択できるようになりました
 ・グループウィジェットの表示にスターが反映されるようになりました
 ・1ラインリスト表示時にヘッダバーの表示を非表示にできる設定を追加しました

その他動作安定のための修正が含まれていますので是非アップデートをお願いします。

Proguardをかけた後の例外をトレースする方法

Proguardをかけた後、例外が上がってきました。
さてどうしましょう。中身はこんな感じになっています

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.miruker.qcontact.c.ah.a(ProGuard:96)
at com.miruker.qcontact.Widgets.AppWidgetService.b(ProGuard:143)
at com.miruker.qcontact.Widgets.AppWidgetService.a(ProGuard:86)
at com.miruker.qcontact.Activity.WidgetSettingsListActivity.setAppWidget(ProGuard:274)
at com.miruker.qcontact.Components.ag.onItemClick(ProGuard:122)
at android.widget.AdapterView.performItemClick(AdapterView.java:292)
at android.widget.AbsListView.performItemClick(AbsListView.java:1068)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2525)
at android.widget.AbsListView$1.run(AbsListView.java:3186)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
at dalvik.system.NativeStart.main(Native Method)

うーん。さてということでproguardではリトレースするためのツールが用意されています。

SDKやOSの環境によるのですが、とりあえずWindows(64bit)の方法です。

作業フォルダDドライブ

まず2つのファイルを用意します。
1.Eclipseプロジェクトの中に、proguardのフォルダがあるはずです。
  この中のmapping.txtをDドライブにコピーします。

2.次に先ほどのスタックトレースをDドライブにtra.txtとして保存します。

あとはコマンド
retrace.bat -verbose d:\mapping.txt d:\tra.txt
と実行
パスが通っていなければ、\tools\proguard\bin\
この中のretrace.batです。

これで結果が出力されます

java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.miruker.qcontact.Data.WidgetGroupCashData.boolean deleteInsert(android.content.Context,int,java.util.List)(ProGuard:96)
at com.miruker.qcontact.Widgets.AppWidgetService.android.widget.RemoteViews loadWidget(android.content.Context,android.widget.RemoteViews,int)(ProGuard:143)
at com.miruker.qcontact.Widgets.AppWidgetService.android.widget.RemoteViews initialWidget(android.content.Context,android.widget.RemoteViews,int)(ProGuard:86)
at com.miruker.qcontact.Activity.WidgetSettingsListActivity.void setAppWidget(android.view.View)(ProGuard:274)
at com.miruker.qcontact.Components.WidgetSettingsListView$onItemClickListener.void onItemClick(android.widget.AdapterView,android.view.View,int,long)(ProGuard:122)
at android.widget.AdapterView.performItemClick(AdapterView.java:292)
at android.widget.AbsListView.performItemClick(AbsListView.java:1068)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2525)
at android.widget.AbsListView$1.run(AbsListView.java:3186)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
at dalvik.system.NativeStart.main(Native Method)


これでどこがエラーかわかるはずです。

開発メモ/Proguardのすすめ

Proguardって、ソースを暗号化するためということで、無料アプリなら別にソース見られたっていいじゃん!とか考えていませんか?

Proguardってそれだけじゃなくてソースコードの圧縮→apkの容量削減にも役立ちます。
でも一つ間違えたらExceptionとか見えなくなるので設定には注意が必要です。

さて、最新のADTでプロジェクトを作るとproject.propertiesに下記の項目が追加されています

proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt

ここの内容はproguardの設定を読み込むライフを指定しているのですが、まずSDK内のtools\proguard\proguard-android.txtを読みます。
そして追加でプロジェクト内のproguard-projectを読みます。
この中で前者ではActivityの名前を難読化から外したりしてくれていますので細かい設定は不要です。(Activity名変えちゃうとマニフェストと整合性が取れなく落ちてしまいます)

で、そのままでも使えるのですが(外部ライブラリがない場合)、そのままだとExceptionの発生した行数などがすべてUnknown Sourceとなってしまいます。
なので、
プロジェクト内のproguard-project.txtに下記を追加してあげます
-renamesourcefileattribute ProGuard <-ソースをProguard文字列に置換します
-keepattributes SourceFile,LineNumberTable <-ソースファイル、行数属性を変換せず維持します

基本的にはこれだけでOKです。

ただ、外部jarなどのライブラリをロードしている場合、これらが難読化されてしまうと思うように動きません。(※下記はAdmobを例にします)
同様にproguard-project.txtに下記を追加します
-libraryjars \libs\GoogleAdMobAdsSdk-6.1.0.jar <-ライブラリをつかうよー
-keep class com.google.ads.** {*;} <-この名前空間は変換しないでね
-dontwarn com.google.ads.** <-この名前空間は警告を出さないでね

これでOKです。dontwarnはいるのかわからないですが、警告がでてリリースビルドができなかったのでぐぐって追加しました。

あとは、エクスポートしたパッケージでテストをしてみるといいです。

Quick電話帳/Ver5.0.3を公開しました

Ver5.0.3
 Ver5.0で追加したグループウィジェットが一部の端末で設定できない不具合への対応です。

Quick電話帳がandronaviにてレビューされました

ということでリンクです。

使いやすい電話帳ということでレビューいただいており、感謝感謝です。
今後とも、機能追加・改善に努めたいと思います。

現在Ver5.0.0の開発を行っております。
 追加予定の機能としては新しくグループウィジェットを搭載する予定です。
 




andronavi

SPモードメールバックアップ/Ver3.7.0を公開しました

・ウィルコムスマートフォンドメインの絵文字変換に対応しました(@wcm.ne.jp)


っていうか知らない間にドメイン増えてたんですね。。。