React-Native productFlavors(错误类型3:活动类不存在)

时间:2016-09-02 09:56:56

标签: gradle react-native react-native-android android-build-flavors

我想在我的Android应用中使用2 productFlavorslivestaging

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,尽管根据this guide

它是正确的

我该如何解决这个问题?

提前致谢!

6 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我通过将appIdSuffix添加到react-native run命令来解决。

react-native run-android --variant variantDebug --appIdSuffix suffix

答案 1 :(得分:2)

使用以下方法从设备卸载应用程序:

cd android && ./gradlew uninstallAll

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

react-native start
react-native run-android

答案 2 :(得分:1)

pull request pending for React Native可解决此问题。

在此之前,您只需将next替换为runAndroid.js file from the pull request

答案 3 :(得分:1)

添加运行时的--appId命令,这样react native就会知道在哪里可以找到Main Activity:

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

答案 4 :(得分:0)

尝试像这样给resValue

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

答案 5 :(得分:0)

由于您在productFlavors中更改了applicationId,react-native-cli无法识别它。要解决此问题,只需在运行启动命令时添加更改的appId

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