RORK LABEN
DEADLINE — 本日8月31日から、Google Play への新規アプリ提出と既存アプリの更新は Android 16(API レベル36)以上をターゲットにする必要がありますSCOPE — 既存アプリは削除されません。ただし要件を下回ったままだと、新しい Android バージョンのユーザーには表示されなくなります。消えないが届かなくなる、という形の影響ですEXTENSION — 間に合わない場合、11月1日までの延長を申請できます。申請という選択肢があること自体を知らずに当日を迎える例が毎年出ていますMIGRATION — Rork の生成物は React Native と Expo が土台です。targetSdkVersion を上げる作業は、Expo SDK とネイティブ依存の更新を必ず伴いますTESTING — 本当に時間を取られるのはビルドが通った後です。バックグラウンド実行制限、権限モデル、フォアグラウンドサービスの型指定が一斉に効きますORDER — 現実的な順序は、延長申請の可否を確認し、Expo SDK のアップグレード計画を立て、最後に最小構成で実機の回帰テストを行うことです。当日に全部やると原因が追えませんDEADLINE — 本日8月31日から、Google Play への新規アプリ提出と既存アプリの更新は Android 16(API レベル36)以上をターゲットにする必要がありますSCOPE — 既存アプリは削除されません。ただし要件を下回ったままだと、新しい Android バージョンのユーザーには表示されなくなります。消えないが届かなくなる、という形の影響ですEXTENSION — 間に合わない場合、11月1日までの延長を申請できます。申請という選択肢があること自体を知らずに当日を迎える例が毎年出ていますMIGRATION — Rork の生成物は React Native と Expo が土台です。targetSdkVersion を上げる作業は、Expo SDK とネイティブ依存の更新を必ず伴いますTESTING — 本当に時間を取られるのはビルドが通った後です。バックグラウンド実行制限、権限モデル、フォアグラウンドサービスの型指定が一斉に効きますORDER — 現実的な順序は、延長申請の可否を確認し、Expo SDK のアップグレード計画を立て、最後に最小構成で実機の回帰テストを行うことです。当日に全部やると原因が追えません
記事一覧/ビジネス
ビジネス/2026-08-31上級

Google Play の期限後、更新を止めた Android アプリを上げるか据え置くかの線引き

更新を止めた Android アプリには、提出の基準とは別の基準が効いています。手元の成果物から実効 targetSdk を並べ、上げる・据え置く・畳むを判断するまでの手順をまとめました。

Google Play32targetSdkVersion4Android 164アプリ運用6個人開発204Expo191

プレミアム記事

Play Console を開いて最初に目に入ったのは、伸びているアプリの数字ではありませんでした。動いていない行のほうです。

しばらく手を入れていないアプリの新規インストールが、前の月より静かになっていました。レビューが荒れたわけでも、ランキングが落ちたわけでもありません。原因は、こちらが何もしなかったことのほうにありました。

個人開発でアプリを何本か抱えていると、更新の頻度には必ず差が出ます。毎月触るものと、年に一度も触らないものが同居する。そして年次のプラットフォーム要件は、その両方に対して等しくやってきます。

厄介なのは、「更新しないアプリには関係がない」という読み方が、半分しか正しくないことでした。

提出の基準と、表示され続ける基準は一段ずれています

Google Play の対象 API レベル要件には、性質の違う二つのルールが同居しています。混ざったまま読むと判断を誤ります。

ルール効く相手2026-08-31 以降の水準満たさないとどうなるか
提出のルール新規アプリの提出と、既存アプリの更新API 36(Android 16)以上公開できない。ビルドをアップロードしても審査に進まない
可視性のルールすでに公開されているアプリ全部API 35 以上ストアからは消えないが、より新しい Android を積んだ端末の新規ユーザーに表示されなくなる

水準が一段ずれている点が要です。更新を出さないつもりなら、36 まで上げる必要はありません。ただし 35 には届いている必要があります。

つまり判断は二択ではなく三択です。「36 に上げて更新を続ける」「35 で据え置いて表示だけ守る」「どちらもせず、新規ユーザーへの露出を諦める」。

なお Wear OS と Android Automotive OS 向けのアプリは、この要件の対象外です。手元に該当するものがあれば、棚卸しの一覧から先に外しておくと迷いが減ります。

要件の一次情報は Android Developers の対象 API レベル要件 にまとまっています。年ごとに水準が動くので、記憶ではなく毎年ここを見に行くほうが確実です。

棚卸しの初手は、手元の成果物から実効値を並べることです

Play Console を1本ずつ開いて確認する方法は、アプリが3本を超えたあたりから破綻します。私はローカルに残っているビルド成果物から機械的に並べる形に変えました。

以下は AAB と APK の両方を走査して、パッケージ名・versionCode・targetSdk をタブ区切りで出すスクリプトです。

#!/usr/bin/env bash
# 手元のビルド成果物から実効 targetSdk を一覧にする
# 使い方: ./target-sdk-inventory.sh ~/builds
# 事前に bundletool(AAB 用)と aapt2(APK 用)が PATH にあること
set -euo pipefail
 
ROOT="${1:-.}"
# bundletool を jar で持っている場合は次のように渡す:
#   BUNDLETOOL="java -jar $HOME/tools/bundletool-all.jar" ./target-sdk-inventory.sh ~/builds
BUNDLETOOL="${BUNDLETOOL:-bundletool}"
AAPT2="${AAPT2:-aapt2}"
 
printf 'artifact\tpackage\tversionCode\ttargetSdk\n'
 
# -print0 と read -r -d '' の組み合わせで、空白を含むパスでも壊れないようにする
find "$ROOT" -type f \( -name '*.aab' -o -name '*.apk' \) -print0 |
while IFS= read -r -d '' f; do
  pkg=""; vc=""; tsdk=""
  case "$f" in
    *.aab)
      # set -e があるため、読めない成果物で全体を止めないよう || true で受ける
      manifest="$($BUNDLETOOL dump manifest --bundle="$f" 2>/dev/null || true)"
      if [ -z "$manifest" ]; then
        printf '%s\t-\t-\tREAD_FAILED\n' "$(basename "$f")"
        continue
      fi
      pkg=$(printf '%s' "$manifest"  | sed -n 's/.*package="\([^"]*\)".*/\1/p' | head -1)
      vc=$(printf '%s' "$manifest"   | sed -n 's/.*android:versionCode="\([^"]*\)".*/\1/p' | head -1)
      tsdk=$(printf '%s' "$manifest" | sed -n 's/.*android:targetSdkVersion="\([^"]*\)".*/\1/p' | head -1)
      ;;
    *.apk)
      badging="$($AAPT2 dump badging "$f" 2>/dev/null || true)"
      if [ -z "$badging" ]; then
        printf '%s\t-\t-\tREAD_FAILED\n' "$(basename "$f")"
        continue
      fi
      pkg=$(printf '%s' "$badging"  | sed -n "s/^package: name='\([^']*\)'.*/\1/p")
      vc=$(printf '%s' "$badging"   | sed -n "s/.*versionCode='\([^']*\)'.*/\1/p" | head -1)
      tsdk=$(printf '%s' "$badging" | sed -n "s/^targetSdkVersion:'\([^']*\)'.*/\1/p")
      ;;
  esac
  # targetSdk が空のまま出る = マニフェストに宣言がない。UNKNOWN と READ_FAILED は必ず分ける
  printf '%s\t%s\t%s\t%s\n' "$(basename "$f")" "${pkg:--}" "${vc:--}" "${tsdk:-UNKNOWN}"
done

期待する出力はこの形です。

artifact	package	versionCode	targetSdk
wallpapers-v210.aab	net.example.wallpapers	210	36
ukiyoe-v180.aab	net.example.ukiyoe	180	35
older-release.apk	net.example.legacy	42	33
broken-artifact.aab	-	-	READ_FAILED

ここで UNKNOWNREAD_FAILED を分けているのには理由があります。両方を空欄にまとめてしまうと、「マニフェストに targetSdkVersion の宣言がないアプリ」と「単に手元の成果物が壊れている・ツールが入っていない」が同じ見た目になります。前者は実際に危険な状態で、後者はこちらの環境の問題です。棚卸しの表で最も避けたいのは、危険なものが環境の問題に紛れることでした。

set -euo pipefail を置きながら、読み取りコマンドだけ || true で受けているのも同じ理由です。1本読めなかっただけで一覧全体が途中で止まると、何本走査できたのかが分からなくなります。止めるべきところと、記録して進むべきところは分けます。

なお targetSdkVersion が宣言されていない場合、Android は minSdkVersion の値を暗黙の target として扱います。マニフェストに書いていないから最新扱いになる、ということはありません。放置期間の長いプロジェクトほど、ここが空白になっていることがあります。

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

この記事の続きを読む

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

この記事で得られること
更新を止めたアプリが新規ユーザーに届かなくなる条件を、提出の基準と切り分けて判断できるようになる
手元のビルド成果物から全アプリの実効 targetSdk を一度に並べ、棚卸しの初手を自動化できるようになる
来年以降の年次要件でも同じ調査を繰り返さずに済むよう、判断の記録を残す形を決められるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

ビジネス2026-08-20
target API 36 の8月31日は、更新を出す人と出さない人で意味が違います
Google Play の8月31日には、更新提出に必要な API 36 と、新規ユーザーへの配信を保つための API 35 という別々の条件が重なっています。6本のアプリを運用する側の仕分け方と、延長フォームが誰に出るのかを整理しました。
ビジネス2026-08-11
新規インストールが止まる4か国を、6本のアプリの流入比率で確かめました
Android の開発者認証は2026年9月30日にブラジル・インドネシア・シンガポール・タイの4か国で始まります。自分のアプリがその期日に本当に影響を受けるのかを、国別インストール比率から判定する手順をまとめました。
ビジネス2026-08-25
Rork と Claude Code の分担は、ビルド環境を誰が持つかで切っています
Rork とターミナル側のコーディングエージェントのどちらで作るかを、生成物の印象ではなく自分のリポジトリの実データで決めるための手順です。保守の着地層を数えるスクリプトと、再生成でネイティブ設定が消える事故を先に見つける検査を掲載しています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →