代码含义解析 代码 if (findMainJavaApp.size() != 1 && findMainKtApp.size() != 1) { throw new GradleException("You need to have MainApplication in your project") } 的作用是检查项目中是否存在 MainApplication 类。
findMainJavaApp是一个集合,用于存储项目中找到的 Java 语言编写的MainApplication类。findMainKtApp是一个集合,用于存储项目中找到的 Kotlin 语言编写的MainApplication类。
当 findMainJavaApp 和 findMainKtApp 这两个集合的大小都不等于 1 时,意味着项目中没有找到符合要求的 MainApplication 类,此时会抛出一个 GradleException 异常,提示“你需要在项目中拥有 MainApplication 类”。
解决相关构建失败问题
检查 MainApplication 类是否存在
- Java 版本:在
android/app/src/main/java/目录下,检查是否存在MainApplication.java文件。如果不存在,可以使用以下示例代码创建:
package your.package.name; import android.app.Application; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; import com.facebook.react.defaults.DefaultReactNativeHost; import com.facebook.soloader.SoLoader; import java.util.List; public class MainApplication extends Application implements ReactApplication @Override protected List
getPackages() @Override protected String getJSM
ainModuleName() { return "index"; } @Override protected boolean isNewArchEnabled() { return BuildConfig
.IS_NEW_ARCHITECTURE_ENABLED; } @Override protected Boolean is
HermesEnabled() { return BuildConfig
.IS_
HERMES_ENABLED; } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } @Override public void onCreate() // ReactNativeFlipper
.initializeFlipper(this, getReactNativeHost()
.getReactInstanceManager()); } }
注意将 your.package.name 替换为项目的实际包名。
- Kotlin 版本:在
android/app/src/main/kotlin/目录下,检查是否存在MainApplication.kt文件。如果不存在,可以使用以下示例代码创建:
package your.package.name import android.app.Application import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactNativeHost import com.facebook.react.ReactPackage import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint import com.facebook.react.defaults.DefaultReactNativeHost import com.facebook.soloader.SoLoader class MainApplication : Application(), ReactApplication override fun getPackages(): List
{ val packages = PackageList(this)
.packages // Packages that cannot be autolinked yet can be added manually here, for example: // packages
.add(MyReactNativePackage()) return packages } override fun getJSM
ainModuleName(): String { return "index" } override fun isNewArchEnabled(): Boolean { return BuildConfig
.IS_NEW_ARCHITECTURE_ENABLED } override fun getUse
Hermes(): Boolean { return BuildConfig
.IS_
HERMES_ENABLED } } override fun getReactNativeHost(): ReactNativeHost { return mReactNativeHost } override fun onCreate() // ReactNativeFlipper
.initializeFlipper(this, reactNativeHost
.reactInstanceManager) } }
同样,将 your.package.name 替换为项目的实际包名。
检查 AndroidManifest.xml 文件
在 android/app/src/main 目录下,打开 AndroidManifest.xml 文件,确保 MainApplication 被正确声明:
<
!-- Other activities and components -->
清除缓存并重新构建
清除项目的缓存并重新构建:
# 清除 Android 项目的构建缓存 cd android ./gradlew clean # 返回项目根目录 cd .. # 重新安装依赖 npm install # 重新构建项目 npx react-native run-android
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/261226.html