android 升级到Expo 47后,React Native主活动{org.example.app.dev/org.example.app.MainActivity}不存在

t98cgbkg  于 2023-03-16  发布在  Android
关注(0)|答案(1)|浏览(70)

我有一个非常奇怪的问题,我不能谷歌出来。它可能看起来像一个重复,但不是。基本上发生的是,当我通过终端构建我的应用程序,我得到一个错误消息:

Starting: Intent { cmp=org.example.app.dev/org.example.app.MainActivity }
Error type 3
Error: Activity class {org.example.app.dev/org.example.app.MainActivity} does not exist.

奇怪的是包的名字是两个,中间有一个斜杠,我在网上没有看到过。第一部分是我们的味道后缀“dev”。
它的问题是,在构建后,应用程序不会自动启动,但在手动点击其图标后,它会正常启动。
当我不得不将我们的应用从Expo 45迁移到Expo 47时,由于Expo 39后的初始设置和迁移都很糟糕,所以从零开始项目并逐个迁移文件会更容易。整个src、资产甚至iOS都很容易,但Android部分真的很奇怪。
我试过:

  • 移动和/或更改和/或添加AndroidManifest.xml中的Intent
  • 更改应用程序ID
  • 三次检查我们的产品风味和构建类型
  • 已检查文件夹和文件层次结构
  • 按照有关卸载应用程序,在Android Studio中重建项目,使所有包失效和重置项目等的说明操作。

下面是指定Intent的AndroidManifest.xml。包名已被占位符值替换。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.example.app">
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
  <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
  <uses-permission android:name="android.permission.VIBRATE"/>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.WAKE_LOCK"/>
  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
  <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
  <application
    android:name=".MainApplication"
    android:label="${APP_NAME}"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:allowBackup="true"
    android:theme="@style/AppTheme"
    android:networkSecurityConfig="@xml/network_security_config"
  >
    <meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://exp.host/@llifmobile/mobile"/>
    <meta-data android:name="expo.modules.updates.EXPO_SDK_VERSION" android:value="47.0.0"/>
    <meta-data android:name="expo.modules.updates.ENABLED" android:value="true"/>
    <meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ALWAYS"/>
    <meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0"/>
    <activity android:name=".SplashActivity" android:label="${APP_NAME}" android:theme="@style/SplashTheme" android:screenOrientation="portrait" android:exported="true">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
    <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:screenOrientation="portrait" android:exported="true" android:theme="@style/Theme.App.SplashScreen">
      <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="example" android:host="app"/>
      </intent-filter>
    </activity>
    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
  </application>
</manifest>

build.gradle文件在升级后发生了很大变化,但没有任何迹象表明是什么原因导致了重复。
这个错误之前并不存在,我希望应用在构建后直接打开。我不确定它在生产中的表现如何,因为它在您手动打开时工作,但我希望在将它推到过渡阶段之前解决它。
我会很乐意为任何形式的建议或领导,谢谢你提前。

cclgggtu

cclgggtu1#

我们的AndroidManifest.xml缺少这个Intent过滤器:

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

.MainActivity
整个街区看起来像这样

<activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:screenOrientation="portrait" android:exported="true" android:theme="@style/Theme.App.SplashScreen">
  <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>
  <intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="somename" android:host="app"/>
  </intent-filter>
</activity>

有趣的是,AndroidManifest.xml像这样工作了一年多,直到世博会升级和SDK以及其他东西之后才停止工作。
希望这对以后的人有帮助。

相关问题