当前位置: 首页 > 知识库问答 >
问题:

React Native CLI对本机依赖项使用自动链接,但以下模块是手动链接的:react-native-google-signin

咸疏珂
2023-03-14

在使用react-native run-android命令构建项目时,我收到了这个错误:警告以下包使用了不推荐使用的“rnpm”配置,该配置将从下一个版本起停止工作:-react-native-google-signin:https://github.com/react-native-community/react-native-google-signin请通知他们的维护人员。您可以在https://github.com/react-native-community/cli/blob/master/docs/configuration.md#migration-guide找到更多详细信息。错误React Native CLI对本机依赖项使用自动链接,但以下模块是手动链接的:-react-native-google-signin(要取消链接,请运行:“React-Native unlink react-native-google-signin”)将React Native从0.60以下升级到0.60以上时可能会发生这种情况。接下来,您可以通过“React-Native unlink”解除这个依赖关系,它将自动包含在您的应用程序中。

From:
"react": "16.4.1",
"react-native": "0.56.0",
"react-native-google-signin": "^0.12.0",
To:
"react": "^16.8.6",
"react-native": "^0.60.5",
"react-native-google-signin": "^2.0.0",
buildscript {
     ext {
          buildToolsVersion = "28.0.3"
          minSdkVersion = 22
          compileSdkVersion = 28
          targetSdkVersion = 28
          supportLibVersion = "28.0.0"
          googlePlayServicesAuthVersion = "+" 
          googlePlayServicesVersion = "+"
         }
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:3.4.1")
classpath("com.google.gms:google-services:4.1.0")
}
}

allprojects {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
}
}
subprojects {
afterEvaluate {project ->
if (project.hasProperty("android")) {
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
}
}
}
}
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",
enableHermes: false, // clean and rebuild if changing
]

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
/*
The preferred build flavor of JavaScriptCore.
For example, to use the international variant, you can use:
def jscFlavor = 'org.webkit:android-jsc-intl:+'
The international variant includes ICU i18n library and necessary data
allowing to use e.g. Date.toLocaleString and String.localeCompare that
give correct results when using with locales other than en-US. Note that
this variant is about 6MiB larger per architecture than default.
/
def jscFlavor = 'org.webkit:android-jsc:+'
/*
Whether to enable the Hermes VM.
This should be set on project.ext.react and mirrored here. If it is not set
on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
and the benefits of using Hermes will therefore be sharply reduced.
*/
def enableHermes = project.ext.react.get("enableHermes", false);
android {
compileSdkVersion rootProject.ext.compileSdkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.biofreshapp"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"

}
splits {
    abi {
    reset()
    enable enableSeparateBuildPerCPUArchitecture
    universalApk false  // If true, also generate a universal APK
    include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"


    }
}
signingConfigs {
    debug {
    storeFile file('debug.keystore')
    storePassword 'android'
    keyAlias 'androiddebugkey'
    keyPassword 'android'
    }  
    release {
    if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
        storeFile file(MYAPP_RELEASE_STORE_FILE)
        storePassword MYAPP_RELEASE_STORE_PASSWORD
        keyAlias MYAPP_RELEASE_KEY_ALIAS
        keyPassword MYAPP_RELEASE_KEY_PASSWORD
    }
    }
}
buildTypes {
    debug {
    signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://facebook.github.io/react-native/docs/signed-apk-android.
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
// 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:
// https://developer.android.com/studio/build/configure-apk-splits.html
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
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
}
}
}
packagingOptions {
pickFirst '/armeabi-v7a/libc++_shared.so'
pickFirst '/x86/libc++_shared.so'
pickFirst '/arm64-v8a/libc++_shared.so'
pickFirst '/x86_64/libc++_shared.so'
pickFirst '/x86/libjsc.so'
pickFirst '/armeabi-v7a/libjsc.so'
}
}

dependencies {

implementation 'com.google.firebase:firebase-core:16.0.6'
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.android.support:appcompat-v7:28.0.0"
//implementation 'androidx.appcompat:appcompat:1.0.0'
//implementation 'androidx.legacy:legacy-support-core-utils:1.0.0'
implementation "com.facebook.react:react-native:+"
implementation(project(":react-native-google-signin"))
if (enableHermes) {
  def hermesPath = "../../node_modules/hermesvm/android/";
  debugImplementation files(hermesPath + "hermes-debug.aar")
  releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
  implementation jscFlavor
}
// implementation(project(":react-native-google-signin")){         
//     exclude group: "com.google.android.gms" 
// }
implementation 'com.google.android.gms:play-services-auth:17.0.0'
}

// 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'
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle");
applyNativeModulesAppBuildGradle(project)
apply plugin: 'com.google.gms.google-services'
rootProject.name = 'DemoApp'
include ':app'
apply from: file("../node_modules/@react-native-community/cli-platform-android /native_modules.gradle");
applyNativeModulesSettingsGradle(settings)

gradle.properties文件包含:

android.useAndroidX=true
android.enableJetifier=true
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
package com.biofreshapp;

import android.app.Application;
import android.util.Log;

import com.facebook.react.PackageList;
import com.facebook.hermes.reactexecutor.HermesExecutorFactory;
import com.facebook.react.bridge.JavaScriptExecutorFactory;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;

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() {
      @SuppressWarnings("UnnecessaryLocalVariable")
      List<ReactPackage> packages = new PackageList(this).getPackages();
      // Packages that cannot be autolinked yet can be added manually here, for example:
      // packages.add(new MyReactNativePackage());
      return packages;
    }

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

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

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

共有1个答案

范玄裳
2023-03-14
implementation(project(":react-native-google-signin"))
 类似资料:
  • Markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用方括号包起来, Markdown 就会自动把它转成链接。一般网址的链接文字就和链接地址一样,例如: <http://example.com/> Markdown 会转为: <a href="http://example.com/">http://example.com/</a> 邮址的自动链接也很类似,只是 Markd

  • 问题内容: 我是ReactJS和React-Router的新手。我有一个组件,通过props 从 react-router 接收一个对象。每当用户单击该组件内部的“下一步”按钮时,我都希望手动调用对象。 现在,我正在使用 refs 访问 支持实例, 并手动单击生成的’a’标记。 问题: 有没有办法手动调用链接(例如)? 这是我目前的代码: 这是我想要的代码: 问题答案: v4推荐的方法是允许您的r

  • 我是ReactJS和react-router的新手。我有一个组件,它通过props从react-router接收对象。每当用户单击该组件中的“下一步”按钮时,我都希望手动调用对象。 现在,我正在使用refs访问支持实例,并手动单击生成的'a'标记。 这是我想要的代码:

  • 问题内容: 我正在使用和。 我想从URL安装额外的库,例如安装setup.py上的git repo。 我在中添加了额外的参数。这意味着,我的库需要额外的库,并且还必须安装它们。 但是git repos之类的网址不是in中的有效字符串。假设,我想从github安装一个库。我已经搜索过该问题,发现了可以放入库中的内容。但这仍然行不通。这是我的依赖链接定义; 链接有效。我可以使用这些URL从Intern

  • 问题内容: 我正在尝试React-Router(v4),但从Nav开始让be 之一出现问题。如果我单击任何标签,则活动的东西开始工作。但是,我希望Home 在应用启动后立即启动,因为这是在路线上加载的组件。有什么办法吗? 这是我当前的代码: 问题答案: 不再具有或属性。在react-router v4中,如果要执行条件样式,则必须使用: 我在home中添加了一个确切的属性,我很确定没有它,home

  • 主要内容:链接其它目录中的库链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。在链接过程中,它必须把符号(变量名、函数名等一些列标识符)用对应的数据的内存地址(变量地址、函数地址等)替代,以完成程序中多个模块的外部引用。 而且,链接器也必须将程序中所用到的所有C标准库函数加入其中。对于链接器而言,链接库不过是一个具有许多目标文件的集合,它们在一个文件中以方便处理。 当把程序链接到一个链接库时,