Android showing blank capacitor app instead of ionic/react app

Environment: wsl2 - ubuntu-18.04, nodejs 12.16.1, ionic-cli 6.4.1, capacitor-cli 6.14.4
Test device: Pixel 3/Android 10

The road so far:

  • Ionic app loads fine in ionic serve
  • I have run ionic build, npx cap sync android and npx cap copy android
  • npx cap open android does not work due to another issue but I am able to manually open the project in android studio
  • I get some gradle warnings when building but the app is successfully sent to my device
  • When the app loads, it shows the capacitor splash screen then goes blank white - none of my code seems to be accounted for

Are these gradle version warnings the cause or is something else going on? I’m new to the android side of things so I’m not sure if there are build settings I’m missing since npx cap open android doesn’t work, or additional config I may have missed along the way.

The build log:

Executing tasks: [:app:assembleDebug] in project /home/me/mobile/myapp/android


> Configure project :app
google-services.json not found, google-services plugin not applied. Push Notifications won't work

> Configure project :capacitor-android
WARNING: API 'variant.getJavaCompiler()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variant.getJavaCompiler(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variantOutput.getPackageLibrary(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.

> Task :app:preBuild UP-TO-DATE
> Task :capacitor-android:preBuild UP-TO-DATE
> Task :capacitor-android:preDebugBuild UP-TO-DATE
> Task :capacitor-android:checkDebugManifest UP-TO-DATE
> Task :capacitor-android:processDebugManifest UP-TO-DATE
> Task :capacitor-cordova-android-plugins:preBuild UP-TO-DATE
> Task :capacitor-cordova-android-plugins:preDebugBuild UP-TO-DATE
> Task :capacitor-cordova-android-plugins:checkDebugManifest UP-TO-DATE
> Task :capacitor-cordova-android-plugins:processDebugManifest UP-TO-DATE
> Task :app:preDebugBuild UP-TO-DATE
> Task :capacitor-android:compileDebugAidl NO-SOURCE
> Task :capacitor-cordova-android-plugins:compileDebugAidl NO-SOURCE
> Task :app:compileDebugAidl NO-SOURCE
> Task :capacitor-android:packageDebugRenderscript NO-SOURCE
> Task :capacitor-cordova-android-plugins:packageDebugRenderscript NO-SOURCE
> Task :app:compileDebugRenderscript UP-TO-DATE
> Task :app:checkDebugManifest UP-TO-DATE
> Task :app:generateDebugBuildConfig UP-TO-DATE
> Task :app:prepareLintJar UP-TO-DATE
> Task :app:generateDebugSources UP-TO-DATE
> Task :capacitor-android:compileDebugRenderscript UP-TO-DATE
> Task :capacitor-android:generateDebugBuildConfig UP-TO-DATE
> Task :capacitor-android:generateDebugResValues UP-TO-DATE
> Task :capacitor-android:generateDebugResources UP-TO-DATE
> Task :capacitor-android:packageDebugResources UP-TO-DATE
> Task :capacitor-android:generateDebugRFile UP-TO-DATE
> Task :capacitor-android:prepareLintJar UP-TO-DATE
> Task :capacitor-android:generateDebugSources UP-TO-DATE
> Task :capacitor-android:javaPreCompileDebug UP-TO-DATE
> Task :capacitor-android:compileDebugJavaWithJavac UP-TO-DATE
> Task :capacitor-android:processDebugJavaRes NO-SOURCE
> Task :capacitor-android:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug UP-TO-DATE
> Task :capacitor-cordova-android-plugins:compileDebugRenderscript UP-TO-DATE
> Task :capacitor-cordova-android-plugins:generateDebugBuildConfig UP-TO-DATE
> Task :capacitor-cordova-android-plugins:generateDebugResValues UP-TO-DATE
> Task :capacitor-cordova-android-plugins:generateDebugResources UP-TO-DATE
> Task :capacitor-cordova-android-plugins:packageDebugResources UP-TO-DATE
> Task :capacitor-cordova-android-plugins:generateDebugRFile UP-TO-DATE
> Task :capacitor-cordova-android-plugins:prepareLintJar UP-TO-DATE
> Task :capacitor-cordova-android-plugins:generateDebugSources UP-TO-DATE
> Task :capacitor-cordova-android-plugins:javaPreCompileDebug UP-TO-DATE
> Task :capacitor-cordova-android-plugins:compileDebugJavaWithJavac UP-TO-DATE
> Task :capacitor-cordova-android-plugins:processDebugJavaRes NO-SOURCE
> Task :capacitor-cordova-android-plugins:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug UP-TO-DATE
> Task :app:javaPreCompileDebug UP-TO-DATE
> Task :app:mainApkListPersistenceDebug UP-TO-DATE
> Task :app:generateDebugResValues UP-TO-DATE
> Task :app:generateDebugResources UP-TO-DATE
> Task :app:mergeDebugResources UP-TO-DATE
> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
> Task :app:processDebugManifest
> Task :app:processDebugResources
> Task :app:compileDebugJavaWithJavac UP-TO-DATE
> Task :app:compileDebugNdk NO-SOURCE
> Task :app:compileDebugSources UP-TO-DATE
> Task :app:mergeDebugShaders UP-TO-DATE
> Task :app:compileDebugShaders UP-TO-DATE
> Task :app:generateDebugAssets UP-TO-DATE
> Task :capacitor-android:mergeDebugShaders UP-TO-DATE
> Task :capacitor-android:compileDebugShaders UP-TO-DATE
> Task :capacitor-android:generateDebugAssets UP-TO-DATE
> Task :capacitor-android:packageDebugAssets UP-TO-DATE
> Task :capacitor-cordova-android-plugins:mergeDebugShaders UP-TO-DATE
> Task :capacitor-cordova-android-plugins:compileDebugShaders UP-TO-DATE
> Task :capacitor-cordova-android-plugins:generateDebugAssets UP-TO-DATE
> Task :capacitor-cordova-android-plugins:packageDebugAssets UP-TO-DATE
> Task :app:mergeDebugAssets UP-TO-DATE
> Task :app:validateSigningDebug UP-TO-DATE
> Task :app:signingConfigWriterDebug UP-TO-DATE
> Task :app:transformClassesWithDexBuilderForDebug UP-TO-DATE
> Task :app:transformDexArchiveWithExternalLibsDexMergerForDebug UP-TO-DATE
> Task :app:transformDexArchiveWithDexMergerForDebug UP-TO-DATE
> Task :app:mergeDebugJniLibFolders UP-TO-DATE
> Task :capacitor-android:compileDebugNdk NO-SOURCE
> Task :capacitor-android:mergeDebugJniLibFolders UP-TO-DATE
> Task :capacitor-android:transformNativeLibsWithMergeJniLibsForDebug UP-TO-DATE
> Task :capacitor-android:transformNativeLibsWithIntermediateJniLibsForDebug UP-TO-DATE
> Task :capacitor-cordova-android-plugins:compileDebugNdk NO-SOURCE
> Task :capacitor-cordova-android-plugins:mergeDebugJniLibFolders UP-TO-DATE
> Task :capacitor-cordova-android-plugins:transformNativeLibsWithMergeJniLibsForDebug UP-TO-DATE
> Task :capacitor-cordova-android-plugins:transformNativeLibsWithIntermediateJniLibsForDebug UP-TO-DATE
> Task :app:transformNativeLibsWithMergeJniLibsForDebug UP-TO-DATE
> Task :app:processDebugJavaRes NO-SOURCE
> Task :app:transformResourcesWithMergeJavaResForDebug UP-TO-DATE
> Task :app:packageDebug
> Task :app:assembleDebug

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 6s
59 actionable tasks: 3 executed, 56 up-to-date

Any help you can give is surely appreciated!

Maybe try editing android/app/src/main/assets/capacitor.config.json, it should have

"server": {
    "url": "http://<your ip on local network>:<port>"
  }

I had same problem, and my issue was that it was pointing to wrong IP.

I have it auto generated after running ionic live reload command, so not sure if any other changes should be added if you start the project without ionic command.

What I used:

ionic cap run android -l --external --host=$(node host.js)

I have small scrip host.js to get the local ip

// host.js
require('dns').lookup(require('os').hostname(), function (err, add) {
  if (err) throw err
  console.log(add)
})

It can be changed to

$(node -e "console.log(require('ip').address())")

But for me it picks up wrong IP as I also run Docker on Windows. Or you can just harcode the value