💥 android.content.ActivityNotFoundException
📄 エラーログ
android.content.ActivityNotFoundException:
Unable to find explicit activity class
{sample/sample.ui.sample.sampleActivity};
have you declared this activity in your AndroidManifest.xml,
or does your intent not match its declared <intent-filter>?
🛠 解消手順
AndroidManifest.xmlに以下の記述を追加する
<activity
android:name=".ui.sample.SampleActivity"
android:exported="false" />
手動でActivityのクラスファイルを追加時、AndroidManifest.xmlに自動登録されないので注意
AndroidManifestにある場合は、パッケージ名などを確認する。
それ以外にはパッケージ名が間違っている時などにも発生する場合がある。
💥 java.lang.RuntimeException
📄 エラーログ
java.lang.RuntimeException: Unable to start activity
ComponentInfo{sample/sample.ui.sample.sample.sample.SampleActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method
'sample.usecase.UseCases sample.MyApplication.getUseCases()'
on a null object reference
🛠 解消手順
AndroidManifest.xmlに以下の記述を確認する
<application
android:name=".MyApplication"
この部分が間違っていると発生する場合がある。
変数定義や呼出元などを確認する
private MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = MyApplication.of(getApplication());
viewModel = ViewModelProviders
.of(this, new SampleViewModel.Factory(
app.getUseCases()
))
.get(SampleViewModel.class);
// 以下略
}
今回は MyApplication
の変数定義部分を以下の書き方をしていたことが原因で発生していた。
🔎 原因の記述を見る
// ここが原因
private MyApplication app = MyApplication.of(getApplication());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = ViewModelProviders
.of(this, new SampleViewModel.Factory(
app.getUseCases()
))
.get(SampleViewModel.class);
// 以下略
}
今回変数定義の private MyApplication app;
の記述と代入部分の app = MyApplication.of(getApplication());
をひとまとめに記述したことで発生していた。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// これはOK(IDEの補完機能による修正)
MyApplication app = MyApplication.of(getApplication());
viewModel = ViewModelProviders
.of(this, new SampleViewModel.Factory(
app.getUseCases()
))
.get(SampleViewModel.class);
// 以下略
}
それ以外にも渡している値の型が違う場合やクラスを呼出す時のクラス名が間違っている場合などに発生する。
💥 It looks like you just edited the targetSdkVersion from 34 to 35 in the editor
📄 エラーログ
It looks like you just edited the `targetSdkVersion` from 34 to 35 in the editor.
Be sure to consult the documentation on the behaviors that change as result of this.
The Android SDK Upgrade Assistant can help with safely migrating.
🛠 解消手順
compileSdkのバージョンを上げる
applay plugin: 'com.android.application'
android {
compileSdk = 35
buildToolsVersion "35.0.0"
defaultConfig {
applicationId "com.sample.sample"
minSdk = 29 // OS10
targetSdk = 35 // OS15
}
}
compileSdk
のバージョンを 35
にあげる。
Android Gradle Pluginのバージョンを上げる
buildscript {
repositories{
// 省略
}
dependencies {
classpath 'com.android.tools.build:gradle:8.6.1'
}
}
AGP Upgrade Assistant を使用し、Android Gradle Plugin
のバージョンを最低でも AGP 8.6.1
にあげる。
🔎 ステーターバーの表示を元に戻す方法
Android15以降を搭載する端末で、targetSdkを35以降にすると Edge To Edge
表示がデフォルトになる。
これによりステータスバーの後ろにアプリの要素が回り込んだ表示となるが、場合によってはステータスバーの表示内容とアプリの要素が重なってしまう。
以下の記述を設定することで Edge To Edge
を無効化して従来の表示形式でステータスバーを表示可能になる。
<!-- 以下を記述する -->
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
💥 Your build is currently configured to use Java XX and Gradle XX
📄 エラーログ
Your build is currently configured to use Java 17.0.1 and Gradle 6.7.1
🛠 解消手順
使用中のGradleと対応するJDKをダウンロードする
File -> Project Structure -> Project
からプロジェクトで使用中のGradleバージョンを確認する。
Settings -> Build, Execution, Deployment -> Buiild Tools -> Gradle
を開き、
Gradle JDK
の1つ目の項目を開いてDownload JDK...
を開き、対応するJDKバージョンをダウンロードする。