Не удается найти класс реакции

Я создал проект, ориентированный на реакцию, и открыл его в студии Android, но получил эти ошибки

package com.project1;

import android.app.Application;
import com.facebook.react.ReactApplication;     //cannot find
import com.facebook.react.ReactNativeHost;      //cannot find
import com.facebook.react.ReactPackage;         //cannot find
import com.facebook.react.shell.MainReactPackage;   //cannot find
import com.facebook.soloader.SoLoader;             //cannot find

import java.util.Arrays;
import java.util.List;

public class MainApplication extends Application implements ReactApplication {

 private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
  return BuildConfig.DEBUG;
}

@Override
protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
      new MainReactPackage()
  );
}

@Override
protected String getJSMainModuleName() {
  return "index";
}
};

@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}

@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
}
}

Здесь все классы реакции выдают ошибку, андроид-студия просто ничего не нашла.

Я также прочитал все сообщения из stackoverflow и github, но, похоже, ничего не работает. Я разочарован сейчас, потому что через 4 дня я запустил этот проект после того, как прошел через все виды проблем с 0.56.0 в Windows. Мне пришлось переключиться на ubuntu и использовать 0.55.4, а затем я запустил этот проект, но теперь я получаю эти ошибки.

Также это мой файл build.gradle на уровне проекта

buildscript {
repositories {
    jcenter()
    google()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.1.4'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

allprojects {
repositories {
    mavenLocal()
    jcenter()
    maven {
        // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
        url "$rootDir/../node_modules/react-native/android"

    }
    google()

}
}

А вот файл build.gradle уровня приложения:

apply plugin: "com.android.application"

import com.android.build.OutputFile

project.ext.react = [
entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"


def enableSeparateBuildPerCPUArchitecture = false


def enableProguardInReleaseBuilds = false

android {
compileSdkVersion 27
//buildToolsVersion '27.0.2'

defaultConfig {
    applicationId "com.project1"
    minSdkVersion 16
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}
splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include "armeabi-v7a", "x86"
    }
}
buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
        def versionCodes = ["armeabi-v7a":1, "x86":2]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }
    }
}

}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:support-v4:27.0.2'
implementation 'com.android.support:design:27.0.2'
implementation 'com.android.support:cardview-v7:27.0.2'
implementation 'com.facebook.react:react-native:0.55.4'

}


task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}

Это скриншот из студии Android enter image description here

почему вы пытаетесь открыть его в студии Android?

Jay Thummar 10.08.2018 14:57

пришлось добавить несколько зависимостей

Srishti Mittal 10.08.2018 14:57

связанные с некоторыми SDK, которые я импортирую

Srishti Mittal 10.08.2018 14:58

вы также можете сделать то же самое, отредактировав файл Gradle вручную из любого редактора

Jay Thummar 10.08.2018 14:59

@JayThummar, хорошо, я признаю, что могу сделать это на улице, но вопрос в другом, пожалуйста, предложите мне, почему студия Android выдает ошибку. Или андроид студия всегда выдает эту ошибку ??

Srishti Mittal 10.08.2018 15:02

@JayThummar Я не знаю, как это сделать за пределами студии Android, и даже если это возможно, мой вопрос в том, почему студия Android выдает все эти ошибки

Srishti Mittal 10.08.2018 15:03

Я думаю, это связано с тем, что React и react native установлены внутри модуля node, и мы открываем только модуль Android, поэтому возникают эти ошибки

Jay Thummar 10.08.2018 15:11

@JayThummar Можете ли вы подробно описать, какие изменения мне нужно внести, чтобы эта работа работала?

Srishti Mittal 10.08.2018 15:16

можешь приложить скриншот своей андроид студии?

Chirag Sharma 10.08.2018 15:29

@ChiragSharma добавил скриншот

Srishti Mittal 10.08.2018 16:07
1
10
347
1

Ответы 1

Прежде всего, поскольку вы столкнулись с проблемой response-native@0.56.0, да, это ошибка в собственной библиотеке response, поскольку она несовместима с некоторыми другими зависимостями. Я ответил на этот вопрос здесь.

Теперь, если вы получаете сообщение об ошибке, что студия Android не смогла найти библиотеки реагирования, это происходит по двум причинам, которые я знаю.

  1. Вы открываете проект Android, копируя / вставляя project1 / android, найденный в другом месте, а затем открывая его из студии Android.
  2. Вы не подключены к Интернету, так как он загружает что-то из Интернета перед сборкой.

Во-вторых, если вы открываете свой проект реакции в студии Android, вы можете построить его только оттуда, но для запуска вашего приложения вам понадобится Метро Bundler. Чтобы запустить его, используйте команду реагировать-родное начало в cmd внутри вашего проекта, ориентированного на реакцию.

Мне удалось успешно открыть свой проект, ориентированный на реакцию, в студии Android и построить там, но я могу работать, если Метро Bundler запущен и предоставил снимок экрана.

После проверки двух вышеупомянутых вещей вы все равно получаете ошибку попробуйте

  1. Удаление node_modules из проекта

  2. Затем запустите npm install --save

  3. Затем запустите реагировать-родной run-android, чтобы проверить, запускается ли приложение в эмуляторе или нет.

Попробуйте описанные выше действия и дайте мне знать, если ошибка не исчезнет.

Android Studio ScreenShot

Visual Studio Code Screenshot

Gradle (Модуль: приложение): -

apply plugin: "com.android.application"

import com.android.build.OutputFile

/**
 * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
 * and bundleReleaseJsAndAssets).
 * These basically call `react-native bundle` with the correct arguments during the Android build
 * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
 * bundle directly from the development server. Below you can see all the possible configurations
 * and their defaults. If you decide to add a configuration block, make sure to add it before the
 * `apply from: "../../node_modules/react-native/react.gradle"` line.
 *
 * project.ext.react = [
 *   // the name of the generated asset file containing your JS bundle
 *   bundleAssetName: "index.android.bundle",
 *
 *   // the entry file for bundle generation
 *   entryFile: "index.android.js",
 *
 *   // whether to bundle JS and assets in debug mode
 *   bundleInDebug: false,
 *
 *   // whether to bundle JS and assets in release mode
 *   bundleInRelease: true,
 *
 *   // whether to bundle JS and assets in another build variant (if configured).
 *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
 *   // The configuration property can be in the following formats
 *   //         'bundleIn${productFlavor}${buildType}'
 *   //         'bundleIn${buildType}'
 *   // bundleInFreeDebug: true,
 *   // bundleInPaidRelease: true,
 *   // bundleInBeta: true,
 *
 *   // whether to disable dev mode in custom build variants (by default only disabled in release)
 *   // for example: to disable dev mode in the staging build type (if configured)
 *   devDisabledInStaging: true,
 *   // The configuration property can be in the following formats
 *   //         'devDisabledIn${productFlavor}${buildType}'
 *   //         'devDisabledIn${buildType}'
 *
 *   // the root of your project, i.e. where "package.json" lives
 *   root: "../../",
 *
 *   // where to put the JS bundle asset in debug mode
 *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
 *
 *   // where to put the JS bundle asset in release mode
 *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in debug mode
 *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in release mode
 *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
 *
 *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
 *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
 *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
 *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
 *   // for example, you might want to remove it from here.
 *   inputExcludes: ["android/**", "ios/**"],
 *
 *   // override which node gets called and with what additional arguments
 *   nodeExecutableAndArgs: ["node"],
 *
 *   // supply additional arguments to the packager
 *   extraPackagerArgs: []
 * ]
 */

project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"

/**
 * Set this to true to create two separate APKs instead of one:
 *   - An APK that only works on ARM devices
 *   - An APK that only works on x86 devices
 * The advantage is the size of the APK is reduced by about 4MB.
 * Upload all the APKs to the Play Store and people will download
 * the correct one based on the CPU architecture of their device.
 */
def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = false

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        applicationId "com.profileui"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
    }
    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
            def versionCodes = ["armeabi-v7a":1, "x86":2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

dependencies {
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
    compile "com.facebook.react:react-native:+"  // From node_modules
}

// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

Gradle (Проект: имя_проекта)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        jcenter()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }
}

ext {
    buildToolsVersion = "26.0.3"
    minSdkVersion = 16
    compileSdkVersion = 26
    targetSdkVersion = 26
    supportLibVersion = "26.1.0"
}

Я не сделал ни одного из двух упомянутых вами пунктов. Я открыл проект студии Android только из этой конкретной папки, и да, Интернет подключен.

Srishti Mittal 10.08.2018 21:05

Я уже пробовал ваше решение, удаляющее node_modules несколько раз. Я уже упоминал, что пробовал большинство вещей из переполнения стека. Я погуглил эту штуку и получил несколько потоков, но в моем случае ничего не работает. Я не знаю, почему, черт возьми, этот фреймворк настолько глючен, что даже не позволит мне запустить простой приветственный мир ... Кстати, если у вас есть другие предложения, прокомментируйте

Srishti Mittal 10.08.2018 21:09

Ваше приложение запускается с помощью run-android с поддержкой реакции? Если да, то проблема в студии Android, я думаю. Я предоставляю скриншоты своей конфигурации Gradle. Проверьте это, а также обновите студию Android, если обновление доступно.

Chirag Sharma 12.08.2018 13:14

Вы добавили много зависимостей, связанных с Android, в Gradle. Я не думаю, что их нужно посмотреть.

Chirag Sharma 12.08.2018 13:47

Другие вопросы по теме