gpt4 book ai didi

android - 如何编写使用自定义应用程序的 Flutter (Android) 插件?

转载 作者:IT王子 更新时间:2023-10-29 07:01:12 27 4
gpt4 key购买 nike

我正在尝试为 Stetho 编写一个插件,遵循 these steps .

它需要在自定义应用程序的 onCreate 方法中进行一些初始化。

public class MyApplication extends Application {
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}

并在 AndroidManifest.xml 中为相同的应用程序创建一个条目。

<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
...>
<application
android:name="MyApplication"
...>
</application>
</manifest>

但是我在为依赖于此插件的 flutter 应用程序尝试 flutter run 时遇到错误 -

D:\Dev\Repo\flutter_test\myapp\android\app\src\main\AndroidManifest.xml:16:9-57 Error:
Attribute application@name value=(io.flutter.app.FlutterApplication) from AndroidManifest.xml:16:9-57
is also present at [:stetho] AndroidManifest.xml:7:18-76 value=(com.vilokanlabs.stetho.stetho.MyApplication).
Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:15:5-38:19 to override.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute application@name value=(io.flutter.app.FlutterApplication) from AndroidManifest.xml:16:9-57
is also present at [:stetho] AndroidManifest.xml:7:18-76 value=(com.vilokanlabs.stetho.stetho.MyApplication).
Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:15:5-38:19 to override.

最佳答案

Android 中似乎只允许一个应用程序节点。按照建议here并记录在案 here .

tool:replace也可能是@sagar-chavada 建议的解决方案,但它不起作用。不知何故,应用程序的 list 被认为/解析晚于插件的 list ,因此 tool:replace 如果在应用程序的 list 中使用(没有用)则有效,但如果在插件的 list 中使用则无效(&抛出错误)。

到目前为止,对我有用的唯一解决方案extending the Flutter's application class在插件中 -

public class MyApplication extends FlutterApplication {
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}

更新应用的 list 文件以使用这个新的子类 -

<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->

<application
android:name="com.vilokanlabs.stetho.stetho.MyApplication"
android:label="myapp"
...

事实证明,这里的评论暗示了同样的事情。对于插件来说可能不是一个很好的解决方案(一旦有两个相互竞争的插件就会失败)但它确实有效!

关于android - 如何编写使用自定义应用程序的 Flutter (Android) 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49083893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com