【问题标题】:WARNING: API 'variant.getMergeAssets()' is obsolete / Android Studio 3.3警告:API 'variant.getMergeAssets()' 已过时 / Android Studio 3.3
【发布时间】:2019-06-22 12:31:54
【问题描述】:

在最近的 android 更新后,每次构建我的应用程序时,我都会收到以下警告:

WARNING: API 'variant.getMergeAssets()' is obsolete and has been replaced with 'variant.getMergeAssetsProvider()'.
It will be removed at the end of 2019.
API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'. 
API 'variant.getPackageApplication()' is obsolete and has been replaced with 'variant.getPackageApplicationProvider()'. 
API 'variant.getMergeAssets()' is obsolete and has been replaced with 'variant.getMergeAssetsProvider()'.

虽然我确实在网上搜索了解决方案,但大多数人建议忽略问题并等待未来的更新来解决问题。还提出了其他解决方案,但根本不起作用。结果,我忽略了警告运行了我的应用程序。

当应用程序加载到我的虚拟设备中时,TextInput 和 Button 都会对触摸做出响应,从而使其无用。我正在为应用程序使用本机反应。请帮我解决这个问题,因为它在 gradle 警告之前没有发生。

我的 build.gradle(Module:app) 有以下几行:

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

    defaultConfig {
        applicationId "com.multiapp"
        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.configureEach { 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 project(':react-native-video')
    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-gesture-handler')
    implementation project(':react-native-sqlite-storage')
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.android.support:appcompat-v7:28.0.0"
    implementation "com.facebook.react:react-native:0.57.8"  // 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'
}

【问题讨论】:

  • 只有getPackageApplication() 可以修复。其他两个警告很可能来自apply from: "...react.gradle" 中引用的插件。只是等待他们更新它。没有什么可做的,除非降级到 Gradle 插件3.2.1。
  • @MartinZeitler 我尝试降级,但没有帮助。
  • 只需清理项目一次。您可以针对:github.com/facebook/react-native/blob/master/react.gradle 提交错误...这可能使用过时的 API。
  • @MartinZeitler 如果您支持这个问题,将会有很大的帮助,以便未来的新反应原生用户可以解决这个问题。 :)

标签: android react-native build.gradle gradle-plugin


【解决方案1】:

来源:@MartinZeitler

如果您像我一样使用 React Native,则修复过时 API 的步骤。

  1. 找到 react.gradle 文件。 (项目名称/node_modules/react-native/react.gradle)

  2. 在您喜欢的文本编辑器中打开文件。

  3. 从https://github.com/facebook/react-native/blob/master/react.gradle更新代码

  4. 点击构建

希望它能自动更新。

【讨论】:

  • 和react-native 0.57.8一起体验这个,我认为我应该更新github.com/facebook/react-native/releases?after=v0.58.3
  • 我正在使用 react-native 0.58.6 但仍然存在问题。所以,我只是在每次创建新项目时更改 react.gradle 文件。
  • 在哪里构建?它不会被检测为 Android Studio 中的文件更改,因为此 react.gradle 文件位于外部。
  • @buddhiv 如果是这样,请单击菜单中的“构建”。点击构建后,将出现一个列表。只需点击“重建项目”。
  • 使用 Flutter 的任何解决方案
猜你喜欢
  • 2019-11-13
  • 2020-03-18
  • 2019-06-19
  • 2019-09-21
  • 2019-11-12
  • 2019-09-02
  • 2019-11-23
  • 1970-01-01
相关资源
最近更新 更多