PDFium on Android

Android 用にビルドできないかなんとなく試してみる。

  • 参考リンク
  • Chromium for Android の手順に従って環境を構築しつつ PDfium 自体はとりあえずホスト (linux x86-64) 用にビルドしてみる。
    • ビルド設定、なんとなく JS は無効にしておく。
  • pdfium_embeddertests をビルド。何事もなく成功。しかし実行すると 27/358 件のテストに失敗する。
    • ランダムに一個覗いてみる。たとえば fpdfsdk/fpdf_edit_embeddertest.cpp の RemovePageObject というテスト。ある種の DOM 操作を API 越しにやる、というテストだけれども、別に JS 関係ない気がするなー・・・。
    • しかしテストのチェック方法がレンダリング結果の MD5 比較とは厳しい。
    • 一応何かは動いてることだし、あんまり深入りしてもいいことなさそうなので保留して先に進む。
  • Android 設定にしてビルドしなおし。
    target_os = "android"
    target_cpu = "arm64"
    aarc64 のテストができている・・・が、実行するにはなんとなく userdebug の端末が必要な気がするな。なお Python のテスト実行スクリプトが生成されて、このへんがさすが Chromium クオリティというかんじだ。
  • PDFium - Getting Started with PDFium によると複数の static libraries ができるはずだが, みたところ libpdfium.a および zlib や jpeg とかのライブラリしかできてない。このへんは変わってそうだな。
  • Android の JNI を呼び出す Java のコードと JNI 実装側の so となる C++ を書く、のがまあざっくりしたゴールなわけだが、そのまえ最低限のものを動かすのに必要な  .a を特定しないといけない。のでまずはホストで素朴な Makefile を書いて hello を動かすかなあ。なぜ GN でないかというとコンパイラの引数とかを自分でいじりたいからです。
  • 今日はここまで。
  • TODO:
    • AArch64 と X86-64 で出力ディレクトリを変える。
    • sample に相当する hello を Makefile で再現する。
    • アプリに組み込む際の構成について考える。


PDFium から AAR を作るにあたり Chromium のビルドシステムに乗ればラクなのでは、とか思ったが気の迷いだった。Chrome のネットワークスタックをライブラリ化した Cronet の BUILD.gn を見るとが何らかの方法はあるように見えるが、これたぶん Chromium のツリーまるごとないとダメだよね。それは嫌です。

Halide がやっているように PDFium を C++ のライブラリとしてパッケージ化して Bazel の BUILD ファイルをつくってやり、それを使う、くらいでいいかなあ。