fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

asciidocで書いたドキュメントをgradleでpdfにビルドする設定

adocで書いていたドキュメントをgradleでpdfにビルドできるように色々やりました。今回のミソはjrubyのgradle pluginを使うとgemを使えるようになるということです。

asciidoctorのプラグインと依存関係のgemを使えるようにするために、次のプラグインをプロジェクトルートのbuild.gradleのdependenciesに追記する。

classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.9.2'
classpath 'com.github.jruby-gradle:jruby-gradle-plugin:1.6.0'

gemを読み込んだりasciidoctorタスクの設定を行ったりする。PlantUMLで図を描いているので、これをPDFに入れるためにasciidoctor-diagramを入れている。これの画像を出力するディレクトリをちゃんと指定しないとPDFに正しく画像が差し込まれない。いい感じのディレクトリレイアウトを知りたい。

また、日本語環境で改行をいい感じにするためにasciidoctor-pdf-cjkを入れている。

apply plugin: 'org.asciidoctor.convert'
apply plugin: 'com.github.jruby-gradle.base'

dependencies {
  gems 'rubygems:asciidoctor-diagram:1.5.9'
  gems 'rubygems:asciidoctor-pdf:1.5.0.alpha.16'
  gems 'rubygems:asciidoctor-pdf-cjk:0.1.3'
}

asciidoctor {
  dependsOn jrubyPrepare
  requires = [
    'asciidoctor-diagram',
    'asciidoctor-pdf-cjk'
  ]
  gemPath = jrubyPrepare.outputDir

  sourceDir = file('docs')
  sources {
    include 'toc.adoc'
   }

  backends = ['pdf']
  outputDir = file('docs/output')
  separateOutputDirs = false
  attributes = [
    'imagesoutdir': 'art', // docs ディレクトリから見た相対パス
    'imagesdir': 'art'
  ]
}

oboeのコードラボをやった時のメモ

かねてより気になっていたoboeのコードラボをやってみた。とりあえず最後まで流してみたという程度で、詳しい動きは追えていない。そこまでのメモということで何卒ご容赦を。

Build a Musical Game using Oboe

  • IllegalStateException: Failed to find Build Tools revision 26.0.2 とか言われる。SDKツール26.0.2をインストールする。
  • RuntimeException: No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android とか言われる。mips64...?となってすこし調べたところbuild toolが古いのが原因なのではないかと考えてsamples/build.gradlecom.android.tools.build:gradleを3.0.1->3.2.1に変更。gradle wrapperのgradleのバージョンも古くて怒られたので4.1->4.10に変更。
  • そのあともいくつかBuild tools revisionのXXXがない!というのが出るのでその都度インストールするととりあえずビルドできる状態になる。
  • あとは説明を読みながら順番に書いていけばとりあえず動くものは出来上がる。
  • エミュレータで動作確認してたからかもしれないが、タップした後に鳴らす音の出始めを早くする(レイテンシを下げる)処理を書いたんだけど早くなった感じがしなかった。
  • バックボタンでアプリを閉じても音が鳴り続けるので止める方法を知りたい。

clearという名前のメソッドをもつViewModelのサブクラスをdalvikvm上で見つけられない人へ

年末、android-ktxをプロジェクトに入れようとして思わぬところで躓いたのでメモしておく。現象としては、Android 5.0以上が動いているエミュレータでは問題ないのに、4.4のエミュレータではアプリが起動するときにクラッシュしてしまうというもので、LogCatには特定のViewModelのサブクラスをロードするときにClassNotFoundExceptionが発生した旨のスタックトレースが出ていた。

以下、手短に:

  • 前提知識
  • クラッシュする理屈: clear()という名前のメソッドを持つViewModelのサブクラスは、dalvikvm上では親クラスのViewModel.clear()をoverrideすることになるが、ViewModel.clear()finalなのでoverrideできない*1。これによってViewModelのサブクラスは仮想マシンに読み込まれず、クラスが見つからない系のランタイムエラーが発生する。
  • 対応
    • サブクラスのclearメソッドの名前を変えました…
    • こういうのはAOSPに報告すべき?

*1:スタックトレースのちょっと上のほうのログにそれっぽいメッセージがでる