公開してみた

まだちょっと手直ししたい所はあるけど、なんとなく公開してみた

マーケットに反映されるのはいつになるのか?
時と場合によってまちまちで、ちゃんとインストールできるかどうか確かめたいのに、なかなか検索に引っかからないorz
公開前に、プレビューとかできないもんかね?

ま、今のところ宣伝する気もないし、 競合にド定番なアプリもあるし、何か不具合があっても大した騒ぎにもならんだろう……

LGPLなライブラリの取り込みとか

目標としてるPerfectViewerがネットワーク共有ファイル(CIFS/SMB)の読み込みに対応してしまった
ここまでやられると、とても今更追いつけないよなぁ、とかモチベーション低下中orz

共有ファイル対応自体は、JCIFSライブラリとか使えば簡単に出来るけどね
問題はライセンス
LGPLなので、条件を満たさないとアプリ自体のソース公開義務が発生してしまう
大雑把に言うと、同じインターフェースの別ライブラリに自由に差し替えて実行できるようになってないと、差し替えてコンパイルできるようにする名目でソース公開が必要とされる
なので、Windowsのdllとかみたいに動的リンクの仕組みであればソース公開義務は回避できる

androidアプリの場合、ライブラリも含めて一つの.apkファイルにコンパイルされてしまう
.apk自体はただのzipファイルだが、ソース部分はやっぱりライブラリを含めてひとつの.dexファイルという中間言語のバイナリに変換されている
特殊なツールを使ってリバースエンジニアリングすればライブラリ部分だけ切り出して別のライブラリに差し替える事も可能ではあるけど、それで回避できるくらいなら、既存のあらゆるプログラムもリバースエンジニアリングすればできる訳で、許されるハズもないと思う

かと言って、フルスクラッチするほどの知識も技術も根気もないし
PerfectViewerはどうしてるのか?と思ってデベロッパーのサイトを見たらapkを配布してたのでzip解凍して中身を見てみたら、まさにJCIFSを使っている様子
普通にライブラリとして組み込んでるだけで、ソース公開義務を回避する策を講じてるとは思えないんだが……ソース公開請求とかしたら見せてくれるのかね?

それはさておき、俺流の回避策としては
・ユーザーが別途自分で公式の配布サイトからjarファイルを入手
・アプリ指定のフォルダに置いてもらう
・アプリ側ではDexClassLoaderを使って動的に.dexファイルを生成して使う
といった感じで考えてみた
素のjarをロードできるのか分からんけど、ダメでも元jarを加工したjarをこちらでソース込みで配布すれば良いだろう
どうせネットワークアクセスのパーミッションが必要になるから、アプリ側から配布サイトにアクセスして自動的に取得する、てやった方がユーザーの手間がなくて良いかな?

この仕組みがうまくいくなら、将来的に機能拡張に対応できるアプリも作れるかな?
ユーザーが欲しいプラグインだけ選択して使えるような

まぁいずれにせよ、とりあえずは将来のバージョンアップで対応だなぁ
まずはいい加減アプリをリリースしないと
プログラム的にはとっくに形になってるんだけど、デザインのセンスがないもので、アイコンとか本棚の背景とかどうしようかな、という所で思考停止してしておりますorz
だれかデザインやってくれないかなぁ

更新されないAlertDialog

書籍情報とかの入力をAlertDialogにカスタムレイアウトをsetViewしてやってたんだが、どうも初期値の設定がうまくいかない
初回は設定通り反映されるけれど、他の初期値で再表示しようとしても前回のままとなってしまう


LayoutInflater factory = LayoutInflater.from(mContext);
View inputView = factory.inflate(R.layout.sample, null);
title = (TextView)inputView.findViewById(R.id.text_title);
title.setText("ここに毎回別の文字列");
alertDialog = new AlertDialog.Builder(mContext)
.setView(inputView)
 :
 :
.create();

て感じにやってるんだが……
AlertDialog.Builderではなく、Dialogクラスでなら、


dialog = new Dialog(this);
dialog.setContentView(R.layout.sample);
title = (TextView)dialog.findViewById(R.id.text_title);
title.setText("ここに毎回別の文字列");

 みたいなやり方で対応できた

AlertDialog.Builderでカスタムレイアウトを使ったフォーム部分は作り直しかなぁorz
検索しても固定レイアウト出すだけでレイアウトの中身を動的に変更してるようなサンプルが見当たらない
回避策はあるものの、ちと面倒くさい
何か良い方法は無いものか……

マニュアルを書いてみた

何かやろうとすると仕事が忙しくなる法則により、随分とブランクが……
当初予定してた、作りながらカタチにしていくというスタイルをやってる暇がなくなったので、プログラムだけ進んでしまった
試行錯誤の様子が記憶だよりになってしまうが、出来上がったものから機能別に記事をでっちあげる方向でやっていく事にしよう

んで、色々細かい調整が残っているけど、現状の整理を兼ねて、既に出来上がってる部分のマニュアルをべた書きしてみたので紹介しておく
体裁を整えてアプリに内蔵したり、改めてこのサイトにまとめたりするだろうけど、とりあえず、どんなアプリになっているかの片鱗が見えるんじゃないかと

マニュアル(暫定版)

前回の機能予定と比べて、いくつくか実装できてないのが分かる
とりあえず最初のリリースでは、これにしおり機能をつけて終わりかな?と考えている
今月中にどうにかしたいが、はてさて

自炊ビュワー(2) 機能案件

自分として「Perfect Viewer」に致命的に足りない機能は見開き表示
「Perfect Viewer」にある「自動見開き」は、前後のページと比べて幅が半分程度以下の画像をくっつけて表示するような動きをする
どうも機能的に「Perfect Viewer」はドキュメントスキャナで取り込んだものではなく、フラットヘッドスキャナで取り込んだデータを想定している気がするな
「自動単ページ」なんかも見開きスキャンを左右で分割して表示する機能のようだし

そんな訳で、目指すべき目標は「Perfect Viewer – 不要機能 + 独自機能」に設定
●とりあえずコミックビュワーとして最低限の基本機能を押さえる
・画像を表示、ページの移動
・表示画像の拡大/縮小/移動
・しおり
・本棚
●不要な機能は切り捨て
・画像リサイズのアルゴリズム選択なんて、スマフォの画面じゃ見分けつかんからイラン
(アルゴリズムの独自実装なんて面倒なだけだし……難しいし)
・設定できる項目は割り切る
あんま細かく設定できても使わん/分りにくくなるだけ
必要な機能だけに絞り込むべし
●独自機能
・見開き表示
好きなページで次(または前)ページと見開き表示
・複数本棚
カテゴリ別とか作者別とか、自由に本棚を作成して整理したい
ひとつの書籍で複数の本棚に配置も可能とする
書籍情報をDB化して、作者別とか出版社別とかの本棚はデフォルトで用意
・隠し本棚
隠してある事自体も可能な限り隠す
→説明ページ等、戻る以外操作しない画面にジェスチャーを仕込む
→その画面で事前に登録したジェスチャー操作をすれば隠しモード解除、とか
・自動着色
こちらの記事に、Androidで動くサンプルがあるので組み込む
※GPL汚染されるので、着色処理部は外部サービスにして切り離す
・ネットワークドライブ対応
これもGPL汚染されるし、切り離しも難しい気がするので保留

自炊ビュワー(1) きっかけ

とりあえず、自分がAndroidアプリを作ろうと思い立った案件
自炊ビュワー

割と最近、書籍のデジタル化、いわゆる自炊をはじめました
押入れ全てを使って平積みしてもまるで収まりきらない量の本があって、なんとかしないと部屋が片付かない状態なんですよ
片付けの達人とか呼ばれる人は揃って「捨てろ」と言うけれど、捨てれるくらいなら誰でも片付けられるっつうの!
自分でも二度と読まないと分ってる本でも残しておきたいんじゃボケ
捨てずに片付けられるようになってから達人を名乗れやゴラァ!

Σ(゚д゚;) ハッ
いかん、わき道に逸れた
まぁそんな感じで、電子化して本体は捨てる事にした訳です
ガジェット好きな身としては、電子書籍化とかやってみたかった、てのもあって
(自炊についても、気が向いたら何か記事を書こう)

で、スキャン作業を進めていくと、当然今度は閲覧方法が必要になってくる
その頃、丁度携帯をスマフォに変更したので、どうせならスマフォで見れる環境を整えよう、と思い立ち
とりあえず今のところ、この分野では定番ぽい「Perfect Viewer」を使っていますが、自分的に欲しい機能が不足していました
機能についての詳細は別記事にまとめるとして、欲しい機能が無いなら自分で作れば良いじゃない、とか安易に考えて現在に至る、という感じです

これからやってくと言ったな、アレは嘘だ!

いや、サイトはこれからやってくんだけど、開発は既にある程度進んでいたりします
なので、しばらくは思考経路を辿りながら関連技術を実験したり失敗したり、てな感じの記事はかけません
当面は既にできてる部分を解説して行く事になるかと思います
可能な限り当時を思い出して、失敗したやり方とかも再現しときたいな、とは思っているけど

本当は、先に書いたようにこれからやってく体ででっち上げようかと思っていたんだけど、それはそれで面倒だな、と

んで、アプリの公開準備をしてると、どうも開発者のサイトの必要そうだ、という事になり
どうせサイト準備するなら、開発記事も書きたいな、と思い立って出来たのがこのサイト
アプリを公開するまでには、まだ色々と手直しが必要なんだけど、とりあえずサイトの立ち上げを先行しておいても損はなかろう

アプリ作るよ

JAVAなんて弄った事もないレベルの俺が四苦八苦しながらAndroidアプリを作る様を綴って行こうというありがちなブログです
集めた情報をまとめて記事にする、て行為が自分的に理解しやすい勉強方法なのです

自分用メモだけだと、読み返した時に意味が理解できない事が多い
当時は記憶が新鮮で、書かなくても覚えてる・書くまでもないと思えた事でも、時間が経つと忘れてたりするものですよね
人に読ませる事を意識したまとめを作る過程で、認識が不足してる箇所が浮かび上がってきたりする事もあります
普段、PCとか何となく使えてても、人に説明しようとするとうまく言葉にできない、て事はありませんか?
記事として晒す事で、こうした曖昧な部分を見つけ出して補完する事が出来る訳です

情報を出す所には情報が集まる法則、てのもあります
しょぼいコードでも、晒しておくと親切な人が改善ソースをコメントしてくれたりする事もありがちだし、質問とか要望コメントに応えてるうちに情報も蓄積される訳で

……そんな感じで、適当にぐだぐだとやっていくよー