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
- Update to
0.60.4
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)
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.4The
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 ofapp/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 includingnative_modules.gradle
into your Gradle build (the last line inandroid/app/build.gradle
).@friederbluemle is spot on đź’Ż
Since
PackageList
is now a generated file, you need to runyarn 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
version4.13.1
, I generate a project, then open theandroid
folder in Android Studio4.1.1
and I get the issue above. This is happening straight out of a generated project.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
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 yourMainApplication.java
fileI inherited a project that was manually linking all it’s packages and the above line wasn’t added during a previous upgrade.