2012年7月25日水曜日

ライセンス認証と可用性

有料アプリにはライセンス認証機能をつける場合が多いと思います。
しかしながら、起動の度にネットワークを必要とするのは可用性に問題があります。

そこでライセンス認証成功後、端末固有情報などを記録し、次回からは記録が有ればライセンス認証を行わないようするなど、工夫が必要です。

端末固有情報はハードウエアの関連からチョイスするのが手ごろです。

APK Expansion Files 追加リソースファイル

今年の4月くらいから「APK Expansion Files」機能がグーグルプレイで使用可能になりました。
この機能を使うとアプリのサイズ上限を4Gバイトまで拡張できます。

しかし、この機能はANDROID2.3.3以降でないとインストール時に追加ファイルをダウンロードしてくれませんでした。
なので追加ファイルをダウンロードするプログラムを実装しないといけません。
面倒ですがライセンス認証機能も含まれるのでセキュリティー向上につながります。

アップロードできるファイルは2個までで、ダウンロードされるファイルの名前は*.OBBになります。
アップロードしたファイル名が自動的にリネームされまが、圧縮処理などはされていません。
展開には通常のZIP解凍処理でも可能ですが、サンプルを手本にした方が効率的です。

2012年7月24日火曜日

invalid proguard configuration file path コンパイルエラー

新しいアプリを公開しようと思い、コンパイルをしてみたとこと「invalid proguard configuration file path」とエラーメッセージが表示されてコンパイルできませんでした。

メッセージの内容を見ればパスの参照先が存在しないのがわかると思います。
どうやらプロジェクト作成時に「proguard.cfg」が作成されていなかったようです。
これも開発環境を弄ったの原因ですね。。

プロジェクト直下にファイルを追加すればエラーは解消されます。
ファイル名[proguard.cfg]


-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*


-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService


-keepclasseswithmembernames class * {
    native <methods>;
}


-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}


-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}


-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}


-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}


-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}


それでもエラーがある場合は不要なライブラリが入っていないかを確認してみてください


2012年7月20日金曜日

ルネッサンス 絵画集

無料アプリ「ルネッサンス絵画集」を公開しました。


盛期ルネサンス三大巨匠の絵画作品を、オフラインで観賞する事ができます。
指定した画家の作品を、スライドショーで表示する事ができます。
お気に入りの絵画を壁紙に設定可能です。

..収録画家
レオナルド ダビンチ
ミケランジェロ
ラファエロ

..主な機能
拡大縮小 ダブルタップ
画像の切り替え スワイプ
スライドショー
画家名の検索とフィルタリング
作品一覧表示
壁紙設定

現在画像数は216枚です。
グーグルプレイの追加ファイルダウンロード機能が安定し次第、画像数を4816毎にする予定です。
そのための検索機能を充実させてあります。
※作品数が多いので作品タイトルは表示しないかもしれません

No Launcher activity found! 新規プロジェクト

ANDROID SDKをサンプル(market_apk_expansion)を入れるついでに アップデートしたらまたエラーが……あれほど開発環境を更新してはいけないと肝に銘じておいたのですが、好奇心に負けました。

新規プロジェクトを作成し、実行してみたところ。

「No Launcher activity found!
The launch will only sync the application package on the device!
成功
....Test.apk installed on device
終了」

調べてみたところマニュフェストファイルのインテントフィルタータグが自動作成されなくなっていました。


    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="nanikore" />
         <intent-filter>
                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

メイトデータタグの下にインテントフィルターと実行タグを追記したところ実行できるようになりました。


2012年7月18日水曜日

Can't open keycharmap file 壁紙設定

インテントから壁紙を設定しようとしたところ
Can't open keycharmap file
Error loading keycharmap file '/system/usr/keychars/atmel-touchscreen.kcm.bin'. hw.keyboards.65538.devname='atmel-touchscreen'
以上のエラーが表示されて壁紙が設定できませんでした。

インテント先でのエラーなので問題が見えづらく、こちらで処理する事も出来ませんが。
ただ単に、画像がリサイズで壁紙の最小サイズよりなていただけでした。

2012年7月17日火曜日

org.eclipse.wst.xml.ui.internal.contentassist.XMLStructuredContentAssistProcessor.setAutoActivationDelay(I)V

エクリプスのプラグインを幾つか導入してみたところ。
org.eclipse.wst.xml.ui.internal.contentassist.XMLStructuredContentAssistProcessor.setAutoActivationDelay(I)V
XMLファイルが開けなくなりました。


カラーテーマのプラグインが影響しているのかと思いアンインストール→クリーン
しかし、問題は解消されず。

他のプラグインも全て削除しても同じでした。
仕方が無いのでANDROID周りのプラグインを更新したら問題が解消されました。

通常のJAVA開発以外でプラグインを使用しないほうがいいかもしれません。

AssignmentOperator Expression"を挿入して Assignment を完了してください

エクリプスのエラーに
"AssignmentOperator Expression" を挿入して Assignment を完了してください
というエラーが表示されました。

調べてみたところ繰り返し文のインクリメントで発生するエラーのようです。
構文的には問題が無いはずだったので困りました。
JAVAの仕様のようですが、知っている人は少ないのではないでしょうか?

厄介なのが構文エラーの解消をエクリプスが認識しない場合があるところです。
一度エラー部分を切り取って、エラーを解消してから張り付けたところエラーが解消されました。

2012年7月11日水曜日

アンドロイド ライセンス認証

グーグルプレイに登録したANDOROIDOアプリは不正配布防止するため、ライセンス認証(オンラインアクティベーション)機能を持たせることができます。

デベロッパーコンソールのプロフィール編集画面に、自分のライセンスの公開鍵がありそれを組み込むのですが。
ちょっとした注意点を述べさせていただきます。

・注意点
1,有料アプリにしかライセンス認証機能を実装できません
無料アプリに組み込むとグーグルプレイからダウンロードできなくなり、ライセンス認証機能も機能しません。
ライセンステスト応答を「通常通り応答します」でテストを行うには、有料アプリを購入してダウンロードする必要があります。
さすがに自分のアプリを購入するものどうかと思うのでライセンステスト応答は「認証、認証失敗」を設定して動作確認をするしかありません。この場合はAPKをアップロードする必要はありません。
2,ライセンス認証だけではセキュリティを破られてしまう。
ライセンス認証はライブラリをインポートして使用します。そのため何読化していないとデコンパイルで認証機能部分を簡単に取り除くことができます。逆に言うと、インポートされたソースごと何読化する事でセキュリティ強化を果たしている。


補足、ライセンス認証テストについて。
デベロッパーコンソールの日本語が変な事は周知の事実だと思います。
テストアカウントの説明が意味不明だったので補足しておきます。
認証テストにはデベロッパーコンソールに登録されているグーグルアカウントが使用されている端末、またはテストアカウントに追加したグーグルアカウント「Gメールアドレス」端末にのみに機能します。





2012年7月9日月曜日

偽メールボックス

無料アプリ「偽メールボックス」を公開しました。
誰かがメールを覗き見しているかもしれないと持ったことはありませんか?
このアプリを開くとフロントカメラで犯人を撮影することができます。
アプリを開いても一見、プログレスバーが表示され続けるだけに見えますが。
メニューボタンを5回タップするとギャラリーに遷移して撮影された写真を見ることができます。

ちょっとした悪戯防犯アプリです。

無音カメラ 連写+

有料アプリ「無音カメラ 連写+」を公開しました。
無料アプリ「無音カメラ 広告無し」に連写機能とインカメラ切り替えを追加したバージョンです。

無音カメラシリーズは音声リモコンカメラの開発の際についでに作成したものだったのですが。無音カメラの方が3~4倍人気があります。人気の新着ツール5位にもなったほどです。
開発のついでに作成した広告無しシリーズが人気なのは嬉しいような悲しいような。

無音カメラ バックグラウンドサービス


有料アプリ「無音カメラ バックグラウンドサービス」を公開しました。
バックグランドで機能する珍しいカメラアプリです。
ブラウザの使用中やスリープモード中でも撮影可能です。


撮影には三つのモードが選べます。
顔認識自動撮影モード
顔を認識して自動的に撮影
近傍センサーモード 
近傍センサー(フロントカメラ横)に手を一瞬かざすと撮影
声や咳払い反応モード
登録したキーワードを発音すると撮影

端末に触れずにカメラ撮影可能なのがこのアプリの利点です。
シャッター音は鳴りません。無音です。
シャッターの音の代わりにバイブレーションを使う事もできます。

このカメラの使いどころとしては、こっそりタイム―カードのコピーを撮影して労働者の権利を守る。または、いじめや不正行為の証拠を撮るなど。
顔認識自動撮影を使用すれば小売店やタクシーでのの監視カメラ代わりにもできるかもしれません。
使用方法は多岐にわたります。