コンテンツへスキップ →

Karteの接客サービスがテスト配布したときだけ表示されなかったこと

経緯

AndroidでKarteの接客サービスの表示テストをしている時、内部テストで配布した場合のみ表示ができない問題がありました。
直接エミュレーター・実機にビルドする場合は問題なく表示できます。

原因

原因は配布しているapkファイルのBuild TypesがReleaseになっていて、KarteのAPIキーが検証環境用になっていなかったのが原因でした。

つまりStagingと思って配布していたのがReleaseに向いていて本番環境用のAPIキーがセットされていることで、Karteの検証環境では接客サービスが表示されないということでした。

なぜ間違えたのか…

fastlaneでapkファイルを作成しているのですが、BuildTypesにDebug・Releaseなどがあると、作成時にそれぞれDebug・Releaseのapkファイルが作成されているようです。

apkファイル作成時に、メッセージを出しているのですが、

desc "APKを作成します"
  desc "bundle exec fastlane apk"
  lane :apk do
    gradle(task: "clean")

    gradle(
      task: "assemble",
      flavor: ENV["PRODUCT_FLAVOR"],
      build_type: ENV["BUILD_TYPE"],
      properties: {
        ...
      }
    )
    UI.success("✨Generated apk: #{lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]}")
  end

UI.successで指定している“SharedValues::GRADLE_APK_OUTPUT_PATH”がどうやら最後に生成したapkファイルしか出力してくれないようで、
実際はDebug・Releaseごとに作成されてるのですが、Releaseのみしかメッセージで出力していなかったのが気づきにくい原因でした。

✨Generated apk: "/Users/xxx/xxx/android/app/build/outputs/apk/stg/release/app-stg-release.apk"

とすると

$ open /Users/xxx/xxx/android/app/build/outputs/apk/stg/release/

上記のようにディレクトリをopenをしたくなります。
この場合、stg以下にreleaseとdebugディレクトが作成されてるのですが、気づきにくいです。

解決策として

1. gradle(build_type: xxx)に”Debug”を指定する

build_type:を指定すると、指定したBuildTypeのapkファイルのみ作成されます。
ポイントは”Debug”にする、”debug”だと上手くいかないです。
配布するBuildTypeが決まっているなら.envファイルに記入してもいいかもしれないです。

2. UI.successの出力にSharedValues::GRADLE_ALL_APK_OUTPUT_PATHSを使う

もしくはメッセージを出力する際にSharedValues::GRADLE_ALL_APK_OUTPUT_PATHS を指定すれば複数のBuild Typesのパスが表示されましたので気づけそうです。

https://docs.fastlane.tools/actions/build_android_app/

余談

Fastlaneのログをよくみてみると、実態はgradlewに対して、assemblestgというコマンドを実行しています。

$ /Users/xxx/xxx/{プロジェクトのroot}/gradlew assemblestg ...

$ ./gradlew tasks

このコマンドの中身はAndroidのルートディレクトリで、

を実行するとタスクの一覧が見ることができます。

https://qiita.com/suin/items/1dc1b76b60246a45fac9

ちなみにBuildTypesを指定しないときに実行されるassembleStgは以下のように説明されてます。

$ ./gradlew tasks
> Task :tasks
------------------------------------------------------------
Tasks runnable from root project 'xxx'
------------------------------------------------------------
...
Build tasks
-----------
assembleStg - Assembles main outputs for all Stg variants.
// すべてのStgバリアント用のメイン出力をアセンブルします。

なるほど、これは全てのStgバリアントのapkファイルを出力してくれます、ということなんだと思います。

参考

カテゴリー: Android