react-native: Update to 0.60.4 breaks Android (error cannot find symbol)

React Native version:

System:
    OS: macOS 10.14.5
    CPU: (8) x64 Intel(R) Core(TM) i7-3615QM CPU @ 2.30GHz
    Memory: 288.14 MB / 16.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 12.4.0 - /usr/local/bin/node
    Yarn: 1.17.0 - /usr/local/bin/yarn
    npm: 6.9.0 - /usr/local/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 12.4, macOS 10.14, tvOS 12.4, watchOS 5.3
  IDEs:
    Android Studio: 3.4 AI-183.6156.11.34.5692245
    Xcode: 10.3/10G8 - /usr/bin/xcodebuild
  npmPackages:
    react: 16.8.6 => 16.8.6
    react-native: 0.60.4 => 0.60.4

Steps To Reproduce

  1. Update to 0.60.4
  2. npx react-native run-android

Describe what you expected to happen:

React Native to build

Description

The app compiles and works fine on iOS and xcode. However, when I try and run the new android code I face the following error:

/redacted/MainApplication.java:6: error: cannot find symbol
import com.facebook.react.PackageList;
                         ^
  symbol:   class PackageList
  location: package com.facebook.react
/redacted/MainApplication.java:28: error: cannot find symbol
      List<ReactPackage> packages = new PackageList(this).getPackages();
                                        ^
  symbol: class PackageList
2 errors

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 9s

error Failed to install the app. Make sure you have the Android development environment set up: https://facebook.github.io/react-native/docs/getting-started.html#android-development-environment. Run CLI with --verbose flag for more details.

This is my MainApplication.java

package com.my.app;

import android.app.Application;
import android.util.Log;

import com.facebook.react.PackageList;
import com.facebook.hermes.reactexecutor.HermesExecutorFactory;
import com.facebook.react.bridge.JavaScriptExecutorFactory;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;

import com.facebook.soloader.SoLoader;

import java.util.List;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      @SuppressWarnings("UnnecessaryLocalVariable")
      List<ReactPackage> packages = new PackageList(this).getPackages();
      // Packages that cannot be autolinked yet can be added manually here, for example:
      // packages.add(new MyReactNativePackage());
      return packages;
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Reactions: 7
  • Comments: 22 (3 by maintainers)

Most upvoted comments

Turns out I was missing the new stuff inside android/app/build.gradle when I used https://react-native-community.github.io/upgrade-helper/?from=0.59.8&to=0.60.4

The android/app/build.gradle file was closed and I missed it 🤕

Adding apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) at the end of app/build.gradle works for me. You can also try it.

With React Native auto-linking, PackageList is now a generated file. Is it is created by including native_modules.gradle into your Gradle build (the last line in android/app/build.gradle).

@friederbluemle is spot on đź’Ż

With React Native auto-linking, PackageList is now a generated file. Is it is created by including native_modules.gradle into your Gradle build (the last line in android/app/build.gradle).

Since PackageList is now a generated file, you need to run yarn react-native run-android to build the android app. That’s what auto links the package and generates that file.

Regardless of if that command builds/fails - if you go back to Android Studio and build the file - PackageList will no longer throw that error!

Edit: you have to run yarn react-native run-android for it to generate this file and make it available, as noted above.

On react-native-cli version 4.13.1, I generate a project, then open the android folder in Android Studio 4.1.1 and I get the issue above. This is happening straight out of a generated project.

Screen Shot 2020-12-08 at 1 48 55 PM

Hi verybluebot and all, add this in settings.gradle : apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)

and this in app/build.gradle at the end : apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

and take a look at https://react-native-community.github.io/upgrade-helper/?from=0.59.0&to=0.61.5 for other changes in files. It worked for me!

add apply from: file(“…/…/node_modules/@react-native-community/cli-platform-android/native_modules.gradle”); applyNativeModulesAppBuildGradle(project) to to your app/build.gradle

@knightcube did you solved it ? On RN 0.63, having this issue too…

Just click “Make Project” in Android Studio,and it will be generated automatically.

Just want to state the obvious in case anyone else who was stuck like me comes across this post.

Ensure import com.facebook.react.PackageList; is included in your MainApplication.java file

I inherited a project that was manually linking all it’s packages and the above line wasn’t added during a previous upgrade.