React-Native productFlavors (тип ошибки 3: класс активности не существует)

Я хочу использовать 2 productFlavors для своего приложения для Android: live и staging.

В 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 не существует? Я предполагаю, что это связано с другим идентификатором приложения, хотя это правильно в соответствии с этим руководством

Как я могу это решить?

Заранее спасибо!


person Vic Torious    schedule 02.09.2016    source источник
comment
См. stackoverflow.com/a/43736188/3163075.   -  person Anima-t3d    schedule 02.05.2017


Ответы (6)


У меня была такая же проблема, и я решил ее, добавив appIdSuffix в команду запуска react-native.

react-native run-android --variant variantDebug --appIdSuffix suffix
person BlaShadow    schedule 17.01.2019

Добавьте команду --appId on run, чтобы реагирующий натив знал, где найти основное действие:

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

person João Baraky    schedule 02.01.2019
comment
по какой-то причине это не работает для меня. У меня есть applicationId внутри каждого productFlavors. Он пытается запустить активность неправильного идентификатора приложения react-native-cli: 2.0.1 - react-native: 0.59.8 - - person Gianfranco P.; 29.05.2019

Удалите приложение с устройства, используя:

cd android && ./gradlew uninstallAll

Затем снова запустите приложение, используя:

react-native start
react-native run-android
person Princewill Iroka    schedule 09.01.2021

Существует отложенный запрос на включение React Native, который решит эту проблему.

До тех пор вы можете просто заменить /node_modules/react-native/local-cli/runAndroid/runAndroid.js на runAndroid .js из запроса на вытягивание.

person oldwizard    schedule 07.03.2017

Попробуйте указать resValue следующим образом:

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

person Pavan Mallela    schedule 19.04.2018

Поскольку вы меняете идентификатор приложения в productFlavors, react-native-cli не может его распознать. Чтобы исправить, просто добавьте измененный appId при запуске команды запуска.

react-native run-android --variant=staging --appId com.some.id.staging
person tuan.tran    schedule 10.08.2020