React Native Android Build Error MainActivity.java:29:错误:找不到符号


82

尝试编译我的React Native android应用时出现此错误。Android应用无法解析BuildConfig.DEBUG。

:app:processDebugJavaRes UP-TO-DATE
:app:compileDebugJavaWithJavac
/Users/amirsharif/mobile-rappad/android/app/src/main/java/com/rappadmobile/MainActivity.java:29: error: cannot find symbol
                .setUseDeveloperSupport(BuildConfig.DEBUG)
                                        ^
  symbol:   variable BuildConfig
  location: class MainActivity
>1 error
:app:compileDebugJavaWithJavac FAILED

我可以通过简单地将其设置为true来临时解决它。我更改了应用程序名称后可能会发生这种情况(因为这也是我一直试图做的事情)。

我可能必须使用Gradle进行更改,以便它再次生成正确的文件。

/**
 * Automatically generated file. DO NOT MODIFY
 */
package com.app;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.rappadmobile";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
}

Answers:


113

我遇到了同样的问题,只需在下面添加以下import语句即可解决MainApplication.java

import com.facebook.react.BuildConfig;

作品。谢谢。我的错误是:错误:找不到符号返回BuildConfig.DEBUG; // ------这在代码中没有导入而被引用。^符号:变量BuildConfig
MPV

1
像魅力一样工作!:)
AndrewHenderson,

这行得通,但是为什么我必须手动添加它却是一个谜。:shrug:
Mike S.

你有我的时间。非常感谢!!
Anilkumar iOS-ReactNative

2
警告:在react-native中执行此操作可能会导致应用程序崩溃。github.com/wix/react-native-navigation/issues/...
illiteratewriter

81

android知道在哪里可以找到某些文件,以及如何连接某些文件,方法是使用AndroidManifest.xml中设置的字段。由于React Native项目的默认设置使用。(-name-of-resource)引用所有内容,这意味着所有内容都将根据<manifest>标签中设置的包名称进行解析。因此,为了使所有事情开箱即用,并按预期生成所有内容,MainActivity.java的路径应与程序包名称相同。

例:

您的应用程序包名称: com.mycompanyname.myappname

MainActivity.java的位置: android/app/src/main/java/com/mycompanyname/myappname/MainActivity.java


5
程序包名称“ com.mycompany.myapp”区分大小写。您还必须在/android/app/build.gradle中更改applicationId
山的Ed,

1
正是我的问题,谢谢。我曾尝试重命名该应用程序,但在某些地方使用不同的名称。我必须确保应用程序名称相似,并且在文件系统文件夹,app / build.gradle applicationId,AndroidManifex.xml“ package”属性以及MainActivity.java和MainApplication.java中的包导入中均为小写-之后通过了构建。
Alexey Grinko

40

我用重建了项目react-native upgrade。当时的问题是我有一些旧文件引用了旧的程序包名称(因为我在中更改了应用程序的名称package.json)。删除这些内容后,我已解决了该问题。


非常感谢!花了几天的时间试图弄清楚这一点。
David B.

我需要删除的具有旧AppName的目录可以在./android/app/src/main/java/com ..and ./ios中找到
remo

像魅力一样工作
Jaseem Abbas

34

在中MainActivity.java,您可以检查第一行是package com.YOU_APP_NAME;

如果此行不存在,则应添加此行。


我试图更改包裹名称,这是我忘记的最后一件事!谢谢!
Mats de Swart

3
仅供参考:我还需要在MainApplication.java中更改程序包名称。
bardu

15

就我而言,我同时更改了BUCK文件和Manifest文件中的程序包名称。

在BUCK文件中,进行如下更改。

android_build_config(
    name = "build_config",
    package = "NEW_PACKAGE_NAME",
)

android_resource(
    name = "res",
    package = "NEW_PACKAGE_NAME",
    res = "src/main/res", )

1
通过执行此操作+在我的项目中的所有Java文件中重命名程序包,解决了我的情况
Antoine Auffray,

13

总结一些答案对我有帮助,总结:

  • 确保您的Java软件包名称正确(MainApplication.java等)
  • 在gradle构建文件中更新软件包名称
  • 更新清单文件中的软件包名称
  • 更新BUCK文件中的软件包名称
  • 确保您的javascript源路径是与您的软件包名称匹配的文件夹结构

第一点“确保您的javascript程序包名称正确”-我们在package.json说,“连接”是什么意思?
诺费尔德

这已经有一段时间了...但是对于包名,我的意思是java文件中的第一行类似于“ package com.yourname.yourproject”
WiRa

6

升级react-native解决了该错误-

react-native upgrade

现在再次构建-

react-native run-android

一个很好的建议,尽管它确实破坏了对某些文件的某些修改。react-native link重新链接本机依赖项后,我不得不再次运行。
艾略特

5

如果您重命名了bundle identifier,则可能需要更改:

您的android/app/src/main/....../MainApplication.java 包装进口

即使我使用react-native-rename npm软件包,它也不能处理一些文件MainApplication.javaMainActivity.java


1
谢谢老兄你节省纽约一天
阿尔斯兰BAJWA


0

检查是否错过了安装react-native-gesture-handler。

用纱

纱线添加反应型手势处理程序

或使用npm

npm install-保存react-native-gesture-handler

然后

react-native链接react-native-gesture-handler


0

我在遵循https://dev.to/karanpratapsingh/quick-guide-for-updating-package-name-in-react-native-3ei3的同时遇到了这种情况。我将应用程序从重命名com.company_appcom.mycompany.myapp,显然,我仍然需要更新一些文件,但这些文件并未包含在我遵循的指南中,我认为该指南仅适用于一般情况,就像一个新的react-native应用程序一样,我解决了通过进行全局搜索,com.company_app然后在需要com.mycompany.myapp时将其替换为一个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.