14

我想将 2productFlavors用于我的 Android 应用程序:livestaging.

app/build.grandle我这样定义它们:

defaultConfig {
    applicationId "com.some.id"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}
splits {...}
buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
    debug {
        debuggable true
        minifyEnabled false
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }

    productFlavors {
        live {
            applicationId "com.some.id"
        }
        staging {
            applicationId "com.some.id.staging"
        }
    }
}

现在,当我运行时react-native run-android --variant=liveDebug一切正常,但是当我尝试运行时,react-native run-android --variant=stagingDebug我得到了错误:

Installed on 1 device.

BUILD SUCCESSFUL

Total time: 11.824 secs
Starting the app on 192.168.56.101:5555 (/usr/local/opt/android-sdk/platform-tools/adb -s 192.168.56.101:5555 shell am start -n com.somepackage/.MainActivity)...
Starting: Intent { cmp=com.somepackage/.MainActivity }
Error type 3
Error: Activity class {com.somepackage/com.somepackage.MainActivity} does not exist.

正如输出所说,该应用程序已安装在设备上,但为什么它说不MainActivity存在?我想这是由于不同的 applicationId 尽管根据本指南它是正确的

我该如何解决这个问题?

提前致谢!

4

6 回答 6

17

我有同样的问题,我通过添加appIdSuffixreact-native运行命令来解决。

react-native run-android --variant variantDebug --appIdSuffix suffix
于 2019-01-17T13:47:29.803 回答
7

添加--appIdon run 命令,这样 react native 就会知道在哪里可以找到 Main Activity:

react-native run-android --variant=stagingDebug --appId com.some.id.staging

于 2019-01-02T18:18:12.440 回答
4

使用以下命令从设备上卸载应用程序:

cd android && ./gradlew uninstallAll

然后使用以下命令再次运行该应用程序:

react-native start
react-native run-android
于 2021-01-09T14:24:36.263 回答
1

有一个待处理的 React Native 拉取请求将解决此问题。

在此之前,您可以简单地用拉取请求/node_modules/react-native/local-cli/runAndroid/runAndroid.js中的runAndroid.js 文件替换。

于 2017-03-07T10:02:50.480 回答
0

尝试这样给予resValue

staging { applicationId "com.some.id.staging" resValue "string", "build_config_package", "com.some.id" }

于 2018-04-19T22:01:25.730 回答
0

因为你改了里面的applicationId productFlavorsreact-native-cli无法识别。要修复,只需在运行 start 命令时添加更改的 appId

react-native run-android --variant=staging --appId com.some.id.staging
于 2020-08-10T02:35:44.323 回答