Pixel 5でmrubyを動かす

December 4, 2020

前回の続き。

https://mruby.tnantoka.com/entry/2020/12/03/223044

次は実機で動かしたい。

有言実行。

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

https://www.ted.com/talks/derek_sivers_keep_your_goals_to_yourself/transcript?language=ja

mrubyのbuild

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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します。

1
2
3
4
$ 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をコピーします。 この手順も前回とほぼ同じです。

1
2
3
$ 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/

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

https://developer.android.com/training/basics/firstapp/running-app?hl=ja

結果は…

動きました!

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