ブログ

Nrealアプリにて Proguard や R8 で最適化するとアプリ起動できない

おそらく設定が足りていないのだが、本筋ではないので調査をいったん終了し、メモを残しておく。

Unity2020.3.37、NRSDK 1.9.3

やったこと

Proguard を適用

  • ProjectSettings - Player - Publishing Settings にて、Custom Proguard File と Release をON
  • ビルドして実機でアプリ起動すると、E/Unity: [Error][NRSessionManager] NRDevice Init failed: [NativeGlassesController] Start: Glasses connect error! とログ出力され、NRメガネを認識しないのでアプリ起動できない
  • ビルド時には proguard_mapping.txt が出力され、たしかに ai.nreal.sdk 以下のクラスが難読化(最適化)されている
  • ai.nreal.sdk 以下が最適化されないように、Assets/Plugins/Android/proguard-user.txt に -keep class ai.nreal.sdk.** { *; } など記載してビルドするもアプリ起動せず
  • そして、proguard_mapping.txt にも変化はなく、Proguard では proguard-user.txt が無視されているような挙動
    • 実際、Gradle プラグイン 3.4.0 以降では Proguard ではなくデフォルトでR8が使用されるとのこと(自分は gradle プラグイン 4.0.1 を使用)
    • https://developer.android.com/studio/releases/gradle-plugin?hl=ja

R8 を適用

  • ProjectSettings - Player - Publishing Settings にて、Custom Proguard File と UseR8 と Release をON
  • ビルドして実機でアプリ起動すると、E/Unity: [Error][NRSessionManager] NRDevice Init failed: [NativeGlassesController] Start: Glasses connect error! とログ出力され、NRメガネを認識しないのでアプリ起動できない
  • ビルド時には r8_mapping.txt が出力され、たしかに ai.nreal.sdk 以下のクラスが難読化(最適化)されている
  • ai.nreal.sdk 以下が最適化されないように、Assets/Plugins/Android/proguard-user.txt に -keep class ai.nreal.sdk.** { *; } など記載してビルドするもアプリ起動せず
  • ただ、r8_mapping.txt に変化があり、proguard-user.txt に記載したものはリストアップされなくなっており、ai.nreal.sdk 以下の最適化をしないようにできているように見える
    • r8_mapping.txt が0バイトになった(なにも記載されなくなった)ので、コードの最適化が全くされなくなったと思いきや、依然としてNRメガネを認識しないので、Nreal Javaコードの最適化が行われてしまっている模様
    • ちなみに、UseR8 をONにしてビルドすると、CustomBaseGradleTemplate と CustomGradlePropertiesTemplate が自動でONになる模様(android.enableR8=**MINIFY_WITH_R_EIGHT** のためか)
    • 次の一手が思いつかず、いったん調査終了
  • ちなみに、mainTemplate.gradle の consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD** を削除すると proguard-user.txt が効かなくなったので、そこは関連している

-ブログ

© 2022 墾田ええねん! Powered by AFFINGER5