Pixel 5でmrubyを動かす

前回の続き。

mruby.tnantoka.com

次は実機で動かしたい。

有言実行。

有言実行は野望達成には逆効果だそうですが。

www.ted.com

mrubyのbuild

Emulatorとはアーキテクチャが違うので、custom_build_config.rbに追記します。

api = 29

MRuby::CrossBuild.new('android_arm64-v8a') do |conf|
  conf.toolchain :android, arch: 'arm64-v8a', platform: "android-#{api}"

  Dir.glob("#{root}/mrbgems/mruby-*/mrbgem.rake") do |x|
    g = File.basename File.dirname x
    conf.gem :core => g unless g =~ /^mruby-(test|bin-.*)$/
  end

  conf.cc do |cc|
    cc.defines << "__ANDROID_API__=#{api}"
    cc.flags << "--sysroot=#{ENV['ANDROID_NDK_HOME']}/sysroot"
  end
end

buildします。

$ cp -r ~/Library/Android/sdk/ndk/21.1.6352462/sysroot/usr/include/android ~/Library/Android/sdk/ndk/21.1.6352462/platforms/android-29/arch-arm64/usr/include

$ cd mruby-2.1.2
$ rake MRUBY_CONFIG=../custom_build_config.rb ANDROID_NDK_HOME=~/Library/Android/sdk/ndk/21.1.6352462/

これでPixel 5で動くlibmruby.aができました。

実機で実行

libruby.aをコピーします。 この手順も前回とほぼ同じです。

$ cd ..
$ mkdir -p app/src/main/cpp/imported-lib/arm64-v8a/
$ cp mruby-2.1.2/build/android_arm64-v8a/lib/libmruby.a app/src/main/cpp/imported-lib/arm64-v8a/

あとは実行するだけです。 実機での実行方法は公式サイトに書いてあります。

developer.android.com

結果は…

f:id:tnantoka:20201204224459p:plain

動きました!

せっかくなので何か作ってみたいけど、まずはAndroidアプリの作り方を勉強しないと…。