RORK LABEN
PLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっていますPLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっています
記事一覧/開発ツール
開発ツール/2026-04-07上級

Google Play の審査で Rork アプリが止まる場所 — AD_ID の混入・権限マージ・12人のクローズドテスト

Rork で生成した Expo アプリが Google Play で止まるとき、原因は書いた覚えのない権限にあることが多くあります。マージ後の AndroidManifest を確定させる手順、AD_ID を宣言する側と外す側の判断、12人・14日のクローズドテストの回し方をまとめました。

Google Play32Android47Rork547Expo192AD_ID権限7審査10

プレミアム記事

22時を回った頃、Play Console から一通のメールが届きました。件名は「ポリシーの問題」。

本文には、どのファイルの何行目が悪いとは書かれていません。書いてあるのは条項名と、ポリシーページへのリンクだけです。

個人開発でアプリを出していると、この一通で夜の予定が消えます。私自身、最初の数回は Play Console の画面を行ったり来たりするだけで時間を使ってしまいました。

やがて分かったのは、Rork で生成した Expo アプリが Google Play で止まる場所は、思っているより限られているということです。そしてその多くが、自分では書いた覚えのない場所にあります。


通知メールは、原因の場所を教えてくれない

まず押さえておきたいのは、通知メールと Play Console の表示は「結果」であって「原因」ではないという点です。

確認すべき場所は決まっています。

Google Play Console → [アプリ名] → ポリシーとプログラム → アプリのコンテンツ
Google Play Console → [アプリ名] → ポリシーとプログラム → ポリシーのステータス

ここで大切なのは、違反条項のリンクを必ず開くことです。メール本文の要約は短すぎて、条項のどの部分に触れたのかが読み取れません。リンク先のポリシーページには、対象となる条件と例外が具体的に書かれています。

私が習慣にしているのは、リンク先のページを開いたら、自分のアプリが「該当する」と判断された条件を一文で書き出すことです。

  • ❌「広告ポリシーに違反した」
  • ⭕「全画面広告を、ユーザーが操作を開始していない画面遷移中に表示した」

後者まで落とし込めないうちは、まだ原因を掴めていません。この一文が書けないまま修正を始めると、直したつもりの箇所が的外れで、再申請でまた同じ条項に当たります。


app.json に書いた権限リストは、権限を減らしてくれない

Rork で生成した Expo アプリで最も多いのが、権限まわりです。そして、ここには構造的な誤解があります。

app.jsonandroid.permissions を短く書き直せば権限が減ると考えてしまうのですが、これは正しくありません。

// app.json — これは「追加するもの」の指定であって、除去の指定ではありません
{
  "expo": {
    "android": {
      "permissions": ["INTERNET", "VIBRATE"]
    }
  }
}

Expo のビルドでは、依存ライブラリがそれぞれ自前の AndroidManifest.xml や config plugin を持っていて、ビルド時にそれらがマージされます。マージで入ってくる権限は、permissions 配列を短くしても消えません。

消すための指定は別にあります。

// app.json — ライブラリが差し込む権限を明示的に取り除く
{
  "expo": {
    "android": {
      "permissions": ["INTERNET", "VIBRATE"],
      "blockedPermissions": [
        "android.permission.RECORD_AUDIO",
        "android.permission.ACCESS_FINE_LOCATION",
        "com.google.android.gms.permission.AD_ID"
      ]
    }
  }
}

blockedPermissions は、マージ時に tools:node="remove" を付けて権限を打ち消す指定です。ポイントは、短縮名ではなく完全修飾名で書くことpermissions 側は "RECORD_AUDIO" のような短縮名を受け付けますが、blockedPermissions"android.permission.RECORD_AUDIO" まで書かないと一致しません。ここで静かに効かないケースをよく見ます。

誰がその権限を入れたのかを、推測せずに突き止める

権限を消す前に、まず「今どうなっているか」を確定させます。憶測で blockedPermissions に並べても、外れていれば時間が溶けるだけです。

Gradle のマニフェストマージャーは、マージの経過をレポートとして残します。

npx expo prebuild -p android
cd android && ./gradlew :app:processReleaseManifest
 
# どのライブラリがどの権限を注入したかが行単位で残っています
grep -n "AD_ID" app/build/outputs/logs/manifest-merger-release-report.txt

このレポートには ADDED from [com.google.android.gms:play-services-ads:...] AndroidManifest.xml:26:5-84 のような形で、注入元のライブラリと行番号が出ます。ここまで見て初めて、消すべきか残すべきかを判断できます。

出来上がった AAB 側から確認する方法もあります。

# 実際に配布される成果物に何が焼き込まれたかを見る
bundletool build-apks --bundle=app-release.aab --output=app.apks --mode=universal
unzip -o app.apks -d apks_out
aapt2 dump permissions apks_out/universal.apk

私は再申請の直前に、必ずこちらを通しています。設定ファイルを直したことと、成果物がそうなっていることは別だからです。EAS Build のキャッシュが効いていて、直したはずの blockedPermissions が反映されていなかった、ということが実際にありました。

確認したいこと見る場所分かること
自分が書いた権限android/app/src/main/AndroidManifest.xmlprebuild 後の自アプリ分のみ
誰が注入したかmanifest-merger-release-report.txt注入元ライブラリと行番号
最終的にどうなったかAAB を aapt2 dump permissions配布物に焼き込まれた実体

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
app.json の permissions では消えない権限を blockedPermissions とマージレポートで確定させる手順
AD_ID を宣言する側と外す側の判断表 — 対象年齢と Families ポリシーの分岐点
新規の個人アカウントに課される 12人・14日のクローズドテストを止めずに回す運用
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-08-21
生成ループが緑を返した後に、私が手元で回している4つの受け入れ検査
ビルドが成功しても出荷できない状態は実在します。AI がビルドを反復する構成で見落とされやすい4点を、成果物そのものを走査する検査スクリプトとして手元に置く方法をまとめました。
開発ツール2026-08-19
Play Policy Insights を Expo プロジェクトに通すと、検出が0件になる条件が3つあります
Google Play が公式に配布し始めたポリシー審査スキルを、Expo 構成のプロジェクトで走らせた記録です。指すディレクトリひとつで検出が5カテゴリから0件に変わりました。走査が届く条件と、出力を鵜呑みにしてはいけない箇所を残します。
開発ツール2026-06-29
写真の「選択した項目だけ許可」に正しく向き合う設計
iOS の写真ライブラリ限定アクセス(選択した項目だけ許可)に Rork(Expo)アプリで正しく対応します。フルアクセス・限定・拒否の3状態の判定、選んだ写真だけを扱う前提の画面設計、追加選択を促す導線までを実装コードとともに整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →