ターゲット変更

自炊リーダーのマーケットコメントにて、メモリ不足で困ってる報告があった
こちらも色々と工夫はしてるのだけど、Dalvik使ってる以上は限界がある
本体にどれだけメモリが余っていても、アプリが使えるメモリは概ね24MB程
しかし、例えばフルHD画像をそのままメモリに展開しようとすると、それだけで8MBくらい必要
自炊用の画像なんか、ドキュメントスキャナで取り込むだろうけど、適当に300dpiくらいで読み込んでも、フルHDサイズなんて軽く超える
自分の使ってる設定でも、B6判サイズのコミックスで1500前後x2300前後のサイズなので、フルHDの1.5倍は行ってる事になる訳だ
アプリそのもののメモリも必要なので、それだけで一度に2枚も読み込めない

そこで、問題の先送りではあるけれど、largeHeap設定を有効にしてみた
largeHeapは使用できるメモリを増やす設定で、最大で128MBくらいまで対応してるらしい
が、この設定はAndroid3系以降でのみ有効なので、アプリのサポート対象である2.3系では使えないorz
まぁそれでも対応する端末であれば効果はあるハズだ

しかし、この設定を追加するだけで、ちょっとしたトラブルに遭遇した
ターゲットSDKバージョンを10から12に変更しただけなのに、突然NoSuchMethodErrorが発生して強制終了するように
調べてみると、どうやら3系から追加されたメソッドと利用してる抽象親クラスのメソッドが衝突したためのようだ
具体的には、ドラッグ&ドロップで入れ替えれるリストを実装するために、ListViewのかわりにAdsListViewを使っていたのだけど、3系からAdsListViewにsetAdapter()メソッドが追加されたせい
今まではAdsListView#setAdapter()がなかったのでsetAdapter()を呼べばListView#setAdapter()が呼ばれていたが、3系からメソッドが追加されたために呼び先が勝手にAdsListView#setAdapter()にされてしまった、というのが原因

SDKのバージョンアップで抽象親クラスで問題起こすようなバージョンアップはやめてくれ……
検索して、同じトラブルの報告と解決策が出て来たから良かったようなものの、そうでなければ、俺くらいのスキルじゃ原因が分からんまま途方に暮れる所だよ!
ちなみに、解決策は、該当するsetAdapter()の利用個所でクラスをListViewに明示的にキャストしてやるだけ
自分の場合、同じ処理をGridViewからも使ってたりしたので、ListViewとGridViewの振り分けとかも必要になって、色々と面倒だった

とりあえずこれで、3系以上ではメモリ問題は緩和されるハズ
……なんだけど、現在WebView版ビューワーを組み込み中なので、公開は少し先になります
困ってる方には申し訳ないですが、今しばらくお待ち下さい

プラグイン類の更新予定

ストアのコメントで要望を受けたので、自動着色とPDF2Imageで、出力の際に新規フォルダを作れるようにする予定

まぁやっぱ必要だよね、とはリリース前から思ってたのだけど、フォルダを作れるのに削除できないのは片手落ちな気がして実装しておかなかった機能なのよね
(間違った名前で作っちゃった時とか消せないと困るし)
かといって、フォルダの削除やリネームをつけると、微妙にやっかいなのよね
それこそ、間違ったフォルダを削除しちゃったりした時なんかに、責任が降りかかる恐れが……
もちろん、そんなのは利用者責任だけども、世の中には色々な人がいるからねー

てな訳で、フォルダを作るだけの機能を追加する予定
出力先選択時に、直接「フォルダに書き出す」ボタンと、「サブフォルダを作って書き出す」ボタンをつけて、サブフォルダを作る場合はフォルダ名入力ダイアログを出す感じで
実際にフォルダが作られるのは書き出し処理を実行する時に

実装自体はすぐにできるのだけど、アプリを公開するのに必要な認証キーが会社PCに入れてあって自宅環境になかったりするので、バージョンアップは週明けまでお待ちください

新ビューワー実験中

AndroidのJavaアプリでは、Dalvikが使えるメモリが小さくて、高解像度な画像をそのまま読み込む事ができず、リサンプリングで荒くしたものしか表示できない
スマホの画面サイズくらいなら多少荒くしても目立たないのだけど、拡大するとどうしても荒さが目立つ
そうでなくとも、自動着色やらを適用するとエフェクト処理のために使用可能なメモリが半分になって、さらに荒くなるし

これを改善するため、現在NDKの勉強中なんだけど、以前も言ったようにC系統の知識に乏しいので、アプリに組み込めるようになるまで相当時間がかかりそうな気配
NDK関連の参考書やサイトを見ても、既にCの知識がある人がAndroidでアプリを組むための内容ばかりで、逆にAndroidを題材にCを学ぼう、的な文献がほとんどないんだよねぇ
なので、まずは別途Cの勉強をした上で、改めてNDKに、という遠回りを強いられている……
まぁ勉強のネタとしてアプリを作ってる訳で、遠回り自体は個人的に問題ないんだが、既にリリース済みのアプリなので、あまりバージョンアップの間隔が開くのもよろしくない

しかし最近、関連するけど別件でフォーラムに質問を投げた時、思いがけない所からヒントを得た
アプリ内でWebページを表示する標準機能としてWebViewというのがあるのだけど、これは別にインターネット上のページを見るだけでなく、アプリ内に用意したローカル上のHTMLファイルを表示する事もできる
で、この機能を使ってimgタグのソースにSDカード上の画像ファイルを渡してやったら、Javaアプリではメモリ不足で落ちるような画像でもあっさり表示する事ができた!

既存の処理をJavaScriptに移植する必要はあるけど、今からCを覚えるより楽だし早い
とりあえず拡大縮小とドラッグでのスクロールまで組んでみたけど、手持ちの端末では処理速度的な問題は今の所感じられないレベル
JavaScriptなら、画像ギャラリー系の各種ライブラリも色々あるし、表示に関しては色々手抜きした上で機能強化もできるかもしれない
問題点はタッチ操作系とマウス操作系の互換だけど、タッチイベントはJavaで処理してから表示系に引き渡せば行ける感じ

まぁアプリ以上に端末ごとの互換性問題とか出そうだし、ゴテゴテ機能を追加していけば処理速度に問題も出てくるかもしれないけど
なんとなく希望が見えて来た感じだ