RORK LABEN
DEADLINE — Google Play の Android 16(API レベル36)必須化は明日8月31日です。残り1日で、新規アプリも既存アプリの更新も対象になりますDECISION — 延長申請は期限を過ぎてからでは提出できません。間に合わせるのか申請へ切り替えるのか、その判断そのものの締切が今日という形になりますVISIBILITY — 更新を止めているアプリも無関係ではありません。API レベル35 未満のままだと、新しい Android 端末の新規ユーザーには表示されなくなりますPITFALL — 依存ライブラリ側が新しい API レベルに追随していない場合、ローカルのビルドは通ってもストアのプリチェックで止まることがあります。自分のコードだけを見ていても分かりませんEXPO — expo@57.0.17 が React Native を 0.86.3 へ更新しました。大きな SDK リリースの合間に破壊的変更のないパッチを挟む流れが見えてきており、追随のコストが下がる方向ですCHOICE — Android も出すなら React Native を生成する本家 Rork、Apple プラットフォーム固有の機能が要件の中心なら Swift を生成する Rork Max。優劣ではなく何を出すかで決まりますDEADLINE — Google Play の Android 16(API レベル36)必須化は明日8月31日です。残り1日で、新規アプリも既存アプリの更新も対象になりますDECISION — 延長申請は期限を過ぎてからでは提出できません。間に合わせるのか申請へ切り替えるのか、その判断そのものの締切が今日という形になりますVISIBILITY — 更新を止めているアプリも無関係ではありません。API レベル35 未満のままだと、新しい Android 端末の新規ユーザーには表示されなくなりますPITFALL — 依存ライブラリ側が新しい API レベルに追随していない場合、ローカルのビルドは通ってもストアのプリチェックで止まることがあります。自分のコードだけを見ていても分かりませんEXPO — expo@57.0.17 が React Native を 0.86.3 へ更新しました。大きな SDK リリースの合間に破壊的変更のないパッチを挟む流れが見えてきており、追随のコストが下がる方向ですCHOICE — Android も出すなら React Native を生成する本家 Rork、Apple プラットフォーム固有の機能が要件の中心なら Swift を生成する Rork Max。優劣ではなく何を出すかで決まります
記事一覧/アプリ開発
アプリ開発/2026-08-30上級

targetSdk を 36 にした後、依存ライブラリのどこを見るか

依存ライブラリの AndroidManifest を実際に6本開いて数えました。targetSdkVersion は1本も書かれておらず、代わりに12個の権限が入ってきます。提出前に何を見るべきかの整理です。

Android 163targetSdkAndroidManifest2Expo190個人開発203

プレミアム記事

targetSdkVersion を 36 に書き換えて、ビルドが通ったところまでは私も同じでした。引っかかったのはそのあとです。「依存ライブラリ側が新しい API レベルに追随していないと、ローカルのビルドは通ってもストアのプリチェックで止まることがある」という話を読んで、では自分は依存側の何を見ればいいのか、が分からないことに気づきました。

個人開発で複数のアプリを並行して抱えていると、期限の前日にやれることは限られます。全部のライブラリの更新履歴を追う時間はありません。せめて「自分のアプリのマニフェストに、依存が何を書き足しているか」だけでも機械的に出せないか。そう思って手を動かした記録です。

先に結論を書きます。依存ライブラリの AndroidManifest に targetSdkVersion は書かれていません。 私が実際に6本の AAR を開いて確かめた範囲では、1本も宣言していませんでした。「依存の targetSdk を棚卸しする」という発想そのものが、存在しない値を探しに行く作業だったわけです。

依存側のマニフェストを6本、実際に開いて数えました

Google の Maven リポジトリから、Expo ベースのアプリでよく入るライブラリの AAR をそのまま取得して、中の AndroidManifest.xml を読みました。AAR の中のマニフェストはバイナリ XML ではなくテキストのままなので、Android SDK も Gradle も要りません。zip を開いて読むだけです。

結果が以下です。uses-sdk の行に何が書かれていたかを、そのまま並べています。

依存(バージョン)uses-sdk の宣言targetSdkVersion
androidx.core:core 1.13.1minSdkVersion="19"宣言なし
androidx.work:work-runtime 2.9.1minSdkVersion="14"宣言なし
androidx.media3:media3-session 1.4.1minSdkVersion="19"宣言なし
com.google.android.gms:play-services-ads-lite 23.3.0minSdkVersion="21"宣言なし
com.google.android.gms:play-services-measurement-api 22.1.2minSdkVersion="21"宣言なし
com.google.firebase:firebase-messaging 24.0.1minSdkVersion="21"宣言なし

6本中6本が minSdkVersion だけを持っていて、targetSdkVersion は持っていません。これは手抜きでも古さでもなく、そういう仕組みだからです。

ライブラリ側の targetSdkVersion は、アプリの成果物には効きません。Android の behavior change はプロセス単位で、アプリの targetSdkVersion を見て適用されます。ライブラリのコードもそのプロセスの中で動く以上、アプリが 36 を宣言した瞬間、ライブラリのコードも 36 の規則の下で動き始めます。ライブラリが「自分は 34 のつもりです」と主張する余地はどこにもありません。

つまり、期限直前に起きる問題の構図はこうです。アプリの値を上げると、追随していないライブラリのコードが、新しい規則の下で動かされる。ライブラリ側の宣言を見ても、その危険は読み取れません。読み取れないものを探しても仕方がないので、見る対象を変える必要がありました。

代わりに入ってくるのは、権限とサービスと queries と property です

targetSdkVersion は入ってきませんが、別のものは確実に入ってきます。同じ6本を対象に、依存が自分のマニフェストへ書き足す要素を数えたところ、重複を除いて12個の権限が入っていました。私は1行も書いていません。

内訳の一部です。

依存持ち込まれるもの
play-services-ads-lite 23.3.0権限6個(INTERNET / ACCESS_NETWORK_STATE / AD_ID / ACCESS_ADSERVICES_AD_ID / ACCESS_ADSERVICES_ATTRIBUTION / ACCESS_ADSERVICES_TOPICS)、queries ブロック1個、property 1個、service 1個、activity 3個
work-runtime 2.9.1権限4個(WAKE_LOCK / ACCESS_NETWORK_STATE / RECEIVE_BOOT_COMPLETED / FOREGROUND_SERVICE)、service 3個、receiver 7個
firebase-messaging 24.0.1権限4個(ACCESS_NETWORK_STATE / POST_NOTIFICATIONS / WAKE_LOCK / c2dm.permission.RECEIVE)、service 2個
play-services-measurement-api 22.1.2権限6個、service 1個、property 1個
androidx.core 1.13.1DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION(アプリの applicationId が前置される) の定義と使用
media3-session 1.4.1なし(uses-sdk のみ)

media3-session のように、何も足さない依存もあります。6本のうち1本がこれでした。全部を疑う必要はなく、足しているものだけを見ればよい、という切り分けがここで立ちます。

注目したのは queriesproperty です。queries はパッケージ可視性の宣言で、他アプリの存在を問い合わせられる範囲を決めます。property は AdServices の設定ファイルを指しています。どちらも権限一覧を眺めているだけでは目に入りません。私自身、AdMob の SDK(play-services-ads)を入れているアプリに <property android:name="android.adservices.AD_SERVICES_CONFIG"> が入っていることを、今回まで意識していませんでした。広告収益のあるアプリなら、まず確実に入っている要素です。

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

この記事の続きを読む

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

この記事で得られること
Android SDK を入れずに、依存ライブラリが自分のアプリへ何を持ち込んでいるかを一覧できるようになります
依存どうしで権限が打ち消し合っている箇所を、ストアへ出す前に見つけられるようになります
マニフェストの静的な確認では判定できない項目を切り分けて、実行時に確かめる対象として別扱いできるようになります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-08-26
タブレットで縦固定が外れる Android 16 の変更と、Expo 側に用意されていない逃げ道
targetSdkVersion 36 では、sw600dp 以上の画面で screenOrientation が無視されます。app.json の orientation では戻せないこと、オプトアウトのプロパティが何を戻して何を戻さないかを、手元で確かめた出力とあわせて整理しました。
アプリ開発2026-08-16
グラフが壊れて見えるのは、データが多いときではなく最初の数日でした
記録アプリの折れ線グラフが、データの少ない最初の数日だけ線が消える。原因はY軸の幅が0になり座標がNaNになることでした。実測した挙動と、描画前に置く小さな正規化層を紹介します。
アプリ開発2026-08-15
TestFlight の外部テストと段階公開、個人開発ではどちらに時間を使うか
Rork で作ったアプリを他人に配るとき、外部テスターを募集する道と段階公開に受け止めさせる道の二つがあります。個人開発の限られた時間をどちらに置くかを、配布が止まる条件と事前検証すべき三領域から整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →