androidアプリ」タグアーカイブ

不可解過ぎます!WebViewのHTML5アプリケーションキャッシュ

AndroidアプリからWEBアプリを操作するハイブリッドアプリを開発リリースしています。その際に用いたWebViewという機能。PC版Javaにも同様のものがあり非常に便利そうに見えるのですが、WebViewが提供するHTML5アプリケーションキャッシュに不可解なことが多くて困っています。

「アプリケーションキャッシュ」とは

「アプリケーションキャッシュ」とは、HTML5で導入されたもので、ネットワークへの接続があってもなくても、scriptやら画像データやらHTMLやら、本体のHTMLから参照される全ての外部ファイルを、そのアプリ専用のキャッシュから読み込んでくれるというもの。極論すればネイティブのアプリケーションのように動作しているように見えるというもの(多少遅いけど)。

この機能は非常に便利で、一度キャッシュされると、ちょっと厳格すぎるように見える手続きを陽に踏まない限り、テコでもキャッシュを更新してくれない位強力なものです。SafariやChromeブラウザでの経験しかありませんが、普通のいわゆるキャッシュとは全然違うようです。

キャッシュとアプリケーションキャッシュの違い

ネットを探してみると、膨大な情報がありますが、なんとなく「キャッシュ」と「アプリケーションキャッシュ」を同じものとして扱っている記事が多い感じです。名前が似ているので当たり前なのですが、それでは何故わざわざ「アプリケーション」キャッシュという言い方をするのでしょうね。

同じ、もしくは包含関係にある、それとも、全く排他的なものなのか、それも不明です。実際どちらにも当てはまりそうな場合がありました。

ここでは、「アプリケーションキャッシュ」でネイティブのアプリケーションのように動作させていながら、必要なときにはキャッシュを消去したり更新したりするにはどうすればいいか、ということを考えます。「更新が効く」/「更新が効かない」は、WebViewで呼ばれるURLにあるscriptファイルの文字列を一部変えてみて、表示に変化があれば「更新が効く」、なければ「更新が効かない」としています。もちろんscriptファイルはmanifestファイル内のCACHEフィールドに記述されておりmanifestファイルの文字列を一部マニュアルで更新しています。

WebView#clearCacheが効かない

ネットによると、キャッシュ消去の標準的なやり方は、WebView#clearCacheを使う方法のようです。onDestroy()中で、WebView#clearCache(true)を実行して「loadStorage」と「アプリケーションキャッシュ」で検証してみました。使い方や呼び出す順序がまずいのか、まったく効きません。ネットでは効くのが当然のような書き方が殆どなので恐らくなにか間違っているのでしょうね。これについては簡単なプログラムで確かめてみたいと思います。

省略値を陽に宣言しないと動作しないのは何故?

Enabling HTML5 AppCache in Android Webview programatically.のページには、WebView#AppCacheEnabled()はよいとして、WebView#AppCachePath()、WebView#AppCacheMaxSIze()にも省略値を陽に指定しないと動作しなかったとあります。実際Path指定がないとエラーになりました。

こういうことがひとつでもあると何を信じてよいか分からなくなりますね。ただ、どこかのページには「Pathを陽に示せ」と書いてあったようにも記憶しています。ちなみにAppCacheMaxSizeに1024*1024*5の代わりに「0」としても「アプリケーションキャッシュ」は動作していました。「0」ではなくて「1」とか思いっきり小さい値がよかったのかも知れませんね、この手の検証では。

「アプリケーションキャッシュ」ではなく、「キャッシュ」だけ使いたい場合にはこのような指定は必要ないのか、これも不明です。

Android端末のアプリケーション設定での謎!?

Android端末の「設定」に「アプリケーション」という設定項目があります。アプリを選び「本体データ削除」「キャッシュ消去」のうち、「キャッシュ消去」を有効にしてみました。すると、そこに出ているキャッシュデータ量を示す数字は0になりますが、依然として「アプリケーションキャッシュ」が動作していました。「キャッシュ消去」前の容量は、ちょうど「アプリケーションキャッシュ」のためにMaxサイズとして指定したものと一致しており、直感的に「キャッシュ」=「アプリケーションキャッシュ」もしくは包含されるように考えてしまいました。

「本体データ削除」だと「アプリケーションキャッシュ」が更新できますね。何故でしょう。ただ本体データ削除のデータ量は70kB程度で自分のアプリは画像を含め150kB程度ありますので、「アプリケーションキャッシュ」が「本体データ」に含まれるというのも数字が合いません。「キャッシュ消去」にでている量は5MB強とリーズナブルです。

やっとみつけたWorkAround(ワークアラウンド、回避策)

「本体データ削除」だと何故か「アプリケーションキャッシュ」が更新できますが、設定が多いと結構つらいです。なので、なにかいい方法はないかと探していたら、すぐ近くにありました。「強制停止」+「キャッシュ消去」です。理由は分かりませんが、設定もそのままでキャッシュ(アプリケーションキャッシュ?)やloadStorageもクリアできるようです。

PHPとは共存できないんでしょうか?

もうひとつ不思議なのが、PHPとの共存です。ご存知かも知れませんが、PHPコードは大抵サーバ側で処理するものですから、manifestファイルにindex.phpとあってもクライアントだけの環境ではうまく動作するはずがありませんが、index.phpそのものではなくindex.phpの処理結果をキャッシュしているのか、それなりに処理できています。いつも厳格な「アプリケーションキャッシュ」の風貌にそぐわない感じがしています。

WebViewのHTML5アプリケーションキャッシュ、不可解過ぎます。

といっても、恐らく私の勉強が足らないだけなのでしょうね。

結構複雑でわかりにくい話ですみません。

関連する記事・ページ

無料Androidアプリ「10秒で10年日記 逆さ日記帳」をGoogle Playにてリリースしました
「10秒で10年日記 逆さ日記帳」の設定に「全てのカレンダ」項目を追加しました
“Just10SecGet10yDiary R10Diary” has another feature of “All Calendars”
自作無料WEBアプリ「10秒で10年日記 逆さ日記帳」に検索機能を追加しました
「10秒で10年日記 逆さ日記帳」というWEBアプリをリリースしました

お世話になったリンク

Enabling HTML5 AppCache in Android Webview programatically.
caching – Cache dynamic page using html5 cache manifest using Android webchromeclient – Stack Overflow

以上です。

Android端末の種類でGoogleカレンダの背景色が微妙に違う!?

iOS系端末とAndroidOS系端末には色々な違いがありますが、アプリ開発者にとって恐らく一番と誰もが認める違いは「端末の種類」でしょう。AndroidOS系端末は現在3000種類以上(ハードの数とOSの版数の掛け算?)あるようです。

こうした膨大な種類があるAndroidOS系で、解像度やボタン配置などのハードの仕様が違うのは当然として、ソフト面でも違うことがあり、Androidアプリを作っていると結構戸惑うことがあります。

今回は、殆どのAndroid系端末にプリインストールされているであろうGoogleカレンダについて、アプリ開発者としての体験談です。

ご存知の方は多いと思いますが、Googleカレンダは複数のカレンダを同時に表示したり検索したりして管理できるのですが、属性のひとつとして「カレンダ背景色」があります

原則的には自動割り当てされますが、仕事や家族や恋愛や信仰などでそれぞれご自分のイメージにあわせた色分けをされている場合も多いと思います。

ちなみに私の場合は、「仕事」は青、「家族」は薄青、「恋愛」関係?はオレンジ、「創造」はピンク、などにしています。今週はどういった時間を使ったかがひと目でわかるため大変重宝しています。

こうした「カレンダ背景色」について、Androidアプリを作成する際にもAPIを通して取得することができますが、私が所持するAndroidOS系端末の種類によって仕様が微妙に異なりました。

挙動に違いについて、最初は単なるバグ(Codingミス)だと思っていましたが、そうではなく「仕様」(または「仕様の周り」)が違うのだということが追々分かってきました。

ソフトウエア技術者は必要最低限の仕様については必ず守ります

仕様が違うといっても、さすがに基本的な「背景色」そのものが違っているわけではありません。ソフトウエア技術者は必要最低限の仕様については必ず守ります。違っていたらそれはバグと認識されて適切に処理されます。

問題は仕様には「陽に」表れなかったであろう「ふるまい」に関するものです。

今回でいえばα(アルファ)要素です。「透明度」と言い換えてもいいと思いますが、これがAndroidOS系端末の種類によって微妙に違っていたのです。

Codeは総取替えになりますが、これが元でテストの完了した端末にも影響がでることになりました。

こうした違いはCodeのいたるところに存在するでしょうね

これを完全に定義するには標準的なCode例を公開したり、上記のような仕様定義の漏れを駆逐していくしかありません。iOS系であまりそうした瑕疵が見られないのは、種類が圧倒的に少ないからです。技術的な戦略が上手だからでソフトウエア開発技術が優秀だからというわけではないでしょう。

以上です。

無料Androidアプリ「10秒で10年日記 逆さ日記帳」をGoogle Playにてリリースしました

「10秒で10年日記 逆さ日記帳」の無料WEBアプリ版を本サイトにてリリースさせていただいておりますが、WEBアプリの性質上、暗号化/復号化の実装は困難でした。

本Androidアプリの目玉機能(というか殆どそれしかありませんが)として「暗号化された内容を復号化する機能」を実装しています。

ただし、本アプリでは「復号化」のみ担当します。「暗号化」については、先にGooglePlayでリリースした「クラウドJ2」、または、Gカレンダ暗号化/復号化PCアプリの「cj2cj2main」「MiniCJ2」にて行います。

暗号化/復号化する必要がなければWEBアプリ版で十分です!

カレンダの予定を暗号化していない場合、または復号化する必要がない場合には、本アプリではなくWEBアプリ版で内容を見たり検索したりできます。

以下は、本アプリによる復号化をスムースに始めていただく為のガイドです。インストール直後にこのガイドに従って操作いただくと後戻り少なく運用できると思います。

ざっくりした流れは、最初にメニュ画面を起動して(復号化のための)パスコードを設定します。戻りボタンでメニュ画面から起動画面に戻り認証します。認証後は見たり検索したりしたいカレンダを選択し基準日を設定すれば過去10年分の予定のリストが現れます。

アプリ上の操作方法

以下、アプリ上の操作方法です。

  1. [メニュ][設定][パスコード]を選択してパスコードを設定します
  2. [パスコードの確認]を選択してパスコード確認を設定します。同じものを入力するだけです。終わったら「戻る」ボタンを押してください
  3. 認証します
  4. 基準日を設定すると過去10年分の予定のリストが現れます
  1. Go [menu][settings][passcode] then set passcode you’d like.
  2. Go [passcode confirm] then set passcide confirm that you set just above. Touch BACK button.
  3. Authorize using Google account
  4. Set a date so that you can see a list of events in the past decade

目次

GetStarted | 10秒で10年日記 逆さ日記帳
使い方 | 10秒で10年日記 逆さ日記帳
表示 | 10秒で10年日記 逆さ日記帳
メニュ | 10秒で10年日記 逆さ日記帳
設定 | 10秒で10年日記 逆さ日記帳
制限および注意 | 10秒で10年日記 逆さ日記帳
今回の変更点と改版履歴 | 10秒で10年日記 逆さ日記帳

関連する記事・ページ

Android向け暗号化日記アプリ「クラウドJ2」をGoogle Playにてリリースしました
無料Androidアプリ「10秒で10年日記 逆さ日記帳」をGoogle Playにてリリースしました
「10秒で10年日記 逆さ日記帳」の設定に「全てのカレンダ」項目を追加しました
“Just10SecGet10yDiary R10Diary” has another feature of “All Calendars”
自作無料WEBアプリ「10秒で10年日記 逆さ日記帳」に検索機能を追加しました
「10秒で10年日記 逆さ日記帳」というWEBアプリをリリースしました
Gカレンダ暗号化/復号化ツール「MiniCJ2」を本サイトにてリリースしました
Gカレンダ暗号化/復号化ツール「MiniCJ」を本サイトにてリリースしました
Android端末の種類でGoogleカレンダの背景色が微妙に違う!?
クラウドジャーナル(androidアプリ)から見えなくなった日記データの復元方法について

以上です[enjoy it!]

Android向け暗号化日記アプリ「クラウドJ2」をGoogle Playにてリリースしました

元々「クラウドジャーナル」という(暗号化)日記アプリをリリースしていますが、暗号化の問題点を改善しつつ、より簡単に始められるようにした「クラウドJ2」を8月1日にGoogle Playにてリリースしました。

store_phone_landscape_color
クラウドJ2 – Google Play の Android アプリ

インストール直後の操作ガイド

以下は、アプリ運用をスムースに始めていただくためのガイドです。インストール直後にこのガイドに従って操作いただくと後戻り少なく運用できると思います。

ざっくりした流れは、最初にパスコードを設定、そのパスコードを元にGoogleカレンダの予定(イベント)の特定フィールド(説明(description))を暗号化するための準備をします。表示された日記リストの中からひとつを選択すれば編集画面になります。暗号化モードを選択して保存すれば、端末の内部カレンダ上で暗号化されます。次に元々端末に備わっている同期機能でクラウド上で暗号化されます。

アプリの操作方法

以下、アプリ上の操作方法です。

  1. メニュ][設定][パスコード]を選択してパスコードを設定します
    store_phone_portrait_settings
  2. パスコードの確認]を選択してパスコード確認を設定します。同じものを入力するだけです。終わったら「戻る」ボタンを押してください
  3. [メニュ][その他][日記帳作成]を選択します。すべてに「了解」または「はい」を選択すればOKです
    store_phone_portrait_book
  4. [メニュ][終了]を選択して一度アプリを終了してください
  5. 再度アプリを起動します
  6. 日記リスト(左)および編集(右)の画面がでます(縦画面では日記リストのみになります)
    store_phone_landscape_color
    store_phone_portrait_color_list
  7. 日記リストの中からひとつ選択すると編集画面にその内容が反映されます
    store_phone_portrait_book日記リストに戻るには「戻る」ボタンを押す。または「横向き」にします
  8. 左下のNone(N)をドロップメニューを選択して暗号化モードを変更するなり、右下のカレンダを変更するなり、左上の日付を変更するなりして、右上の保存ボタンをタッチすると内部カレンダを更新します。端末の同期機能でクラウドの予定(イベント)は自動更新されます。
  1. Go [menu][settings][passcode] then set passcode you’d like.
  2. Go [passcode confirm] then set passcide confirm that you set just above. Touch BACK button.
  3. Go [menu][misc][auto-generate] then go further when encounter dialogs select confirm
  4. Go [menu][finished] then finish the app
  5. Invoke the app
  6. You can see a listview
  7. Select a event in Listview then you can see the contents of the event in Editview
  8. Select crypt-mode with bottom-left popdown, or select other calendar with bottom-right popdown?or select date with top-left button, and when you touch save-button the app update the contents?of the event in internal-calendar-DB. Corresponding data in Google calendar will be updated?with pre-installed sync function of the device.

クラウドデータの一括暗号化/復号化

この操作方法では、一度にひとつの予定(イベント)しか暗号化できません。カレンダの全予定(イベント)を一括暗号化するにはPC上のアプリ(cj2cj2main)を使用します。
[With this method, only one event can be encrypted at a time. ?If you want all events of calendar encrypted, you need to use other exclusive app on PC]

Gカレンダ暗号化/復号化一括処理ツール[cj2cj2main]については、こちらを参照してください。

詳細はサポートページを参照してください。
[Pls refer to the web page above for more info.]

目次

使い方 | クラウドJ2
表示 | クラウドJ2
メニュ | クラウドJ2
設定 | クラウドJ2
制限および注意 | クラウドJ2
今回の変更点と改版履歴 | クラウドJ2

関連する記事・ページ

Android向け暗号化日記アプリ「クラウドJ2」をGoogle Playにてリリースしました
無料Androidアプリ「10秒で10年日記 逆さ日記帳」をGoogle Playにてリリースしました
「10秒で10年日記 逆さ日記帳」の設定に「全てのカレンダ」項目を追加しました
“Just10SecGet10yDiary R10Diary” has another feature of “All Calendars”
自作無料WEBアプリ「10秒で10年日記 逆さ日記帳」に検索機能を追加しました
「10秒で10年日記 逆さ日記帳」というWEBアプリをリリースしました
Gカレンダ暗号化/復号化ツール「MiniCJ2」を本サイトにてリリースしました
Gカレンダ暗号化/復号化ツール「MiniCJ」を本サイトにてリリースしました
Android端末の種類でGoogleカレンダの背景色が微妙に違う!?
クラウドジャーナル(androidアプリ)から見えなくなった日記データの復元方法について

以上です。

初めて「暗記の井戸」アプリを使う方へ

初めて「暗記の井戸」アプリを使う方へ

1.インストール後の最初の起動時に、「メニュ-その他-移行」を設定して、
Quiz1-Quiz5までの問題名リストを作成する

quizbook_480x854

2.下記をPC上でreadsd.txtというファイル名で作成してsdcardの
直下に

\ankinoid\readsd.txt

というパス名で保存する。

下記例のように日本語が混在する場合は文字コードをUTF-8で
保存すること。「TeraPad」や「メモ帳」なら文字コード指定可能。

sdcardが使えない場合は、WELL入力を使う方法がありますが、
WELL入力の場合とsdcard入力の場合では仕様が異なりますので
注意が必要です

——————————————————————————–
*ankinoid
[cmd]
quizno=5
append=off
[twoline]
秋の田の かりほの庵の とまをあらみ
我が衣手は 露にぬれつつ       1 天智天皇
百敷や 古き軒端の しのぶにも
なほあまりある 昔なりけり        100 順徳院
[cmd]
quizno=1
append=off
[oneline]
挨       1607    人名用     準1級     【アイ】お(す)・ひら(く)
錮       7894    非人名     1級      【コ】ふさ(ぐ)、とじこ(める)、かた(い)、ながわずら(い)
[cmd]
quizno=2
append=off
[twoline]
「今日の心理が、明日否定されるかも知れない。それだからこそ、私どもは、明日進むべき道をさがしだす。」
湯川秀樹


「それでも地球は動いている」
ガリレオ・ガリレイ 


[cmd]
quizno=3
append=off
[oneline]
阿鼻叫喚 (あびきょうかん)非常にむごたらしいさまをいう。
魑魅魍魎 (ちみもうりょう)いろいろの化け物。さまざまの怪物。
[cmd]
quizno=4
append=off
[oneline]
愛 ばら・赤
笑って別れましょう 小輪の黄バラ
——————————————————————————–

上記環境によってはonelineモードにおける読込みがうまくできないかも知れません。
全角の空白文字が区切り記号(デリミタ)になってしまう場合が考えられます。

3.アプリ起動して、Quiz1(どれでもいいですが)をタッチして問題リスト画面にする

4.「メニュ-その他-外部媒体」をタッチしてOKをタッチする

これでQuiz1からQuiz5まで上記に対応した内容に変わっているはず。

5.Quiz1をロングタッチして問題名を変更する(例:百人一首)

quizbookedit_480x854

以上ですが、これは5つの「問題名」を対象にした設定方法です。それ以上
設定したい場合には、個別に「問題名」を追加し、その「問題名」でWELL
入力機能を使ってonelineモードまたはtwolinesモードで問題リストを追加
する必要があります。

以上