You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter项目运行报错:Java代码使用废弃API及资源链接失败

问题与解决方案

问题情况

  • 我fork了一个包含MusicKit Plugin原生Java代码的Flutter项目
  • 运行时出现构建失败,同时提示Java代码使用了废弃API

构建报错信息

Note: C:\Users\angel\Desktop\flutter_music_kit\flutter_musickit\android\src\main\java\com\zivost\musickit\MusickitPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processDebugResources'.
> Android resource linking failed
  C:\Users\angel\.gradle\caches\transforms-1\files-1.1\core-1.6.0.aar\11c6125161db973e0f4388722c28df2b\res\values\values.xml:192:5-228:25: AAPT: error: resource android:attr/fontVariationSettings not found.

  C:\Users\angel\.gradle\caches\transforms-1\files-1.1\core-1.6.0.aar\11c6125161db973e0f4388722c28df2b\res\values\values.xml:192:5-228:25: AAPT: error: resource android:attr/ttcIndex not found.

  error: failed linking references.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 39s
Exception: Gradle task assembleDebug failed with exit code 1

涉及的Java代码

package com.zivost.musickit;

import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;

/** MusickitPlugin */
public class MusickitPlugin implements MethodCallHandler {
  /** Plugin registration. */
  public static void registerWith(Registrar registrar) {
    final MethodChannel channel = new MethodChannel(registrar.messenger(), "musickit");
    channel.setMethodCallHandler(new MusickitPlugin());
  }

  @Override
  public void onMethodCall(MethodCall call, Result result) {
      result.notImplemented();
  }
}

解决方案

1. 解决Android资源链接错误(构建失败核心原因)

fontVariationSettings和ttcIndex是Android API 26(Android 8.0)引入的属性,需确保项目SDK版本达标:

  • 打开android/app/build.gradle文件
  • 修改compileSdkVersion和targetSdkVersion为26或更高版本,示例:
    android {
        compileSdkVersion 34
        defaultConfig {
            targetSdkVersion 34
            // 保留其他原有配置
        }
    }
    
  • 同步Gradle后重新构建

2. 修复废弃API问题

原代码使用的registerWith(Registrar)是Flutter旧版插件注册方式,已被废弃,替换为新的嵌入v2实现:

  • 更新Java代码为:
    package com.zivost.musickit;
    
    import io.flutter.embedding.engine.plugins.FlutterPlugin;
    import io.flutter.plugin.common.MethodCall;
    import io.flutter.plugin.common.MethodChannel;
    import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
    import io.flutter.plugin.common.MethodChannel.Result;
    
    /** MusickitPlugin */
    public class MusickitPlugin implements FlutterPlugin, MethodCallHandler {
      private MethodChannel channel;
    
      @Override
      public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
        channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "musickit");
        channel.setMethodCallHandler(this);
      }
    
      @Override
      public void onMethodCall(MethodCall call, Result result) {
          result.notImplemented();
      }
    
      @Override
      public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) {
        channel.setMethodCallHandler(null);
      }
    }
    
  • 打开android/src/main/AndroidManifest.xml,将原插件注册的meta-data替换为:
    <meta-data
        android:name="flutterEmbedding"
        android:value="2" />
    

内容的提问来源于stack exchange,提问作者Harvey Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:21:13