java - Markwon 库的 Xamarin Android 绑定
问题描述
我正在尝试为库生成 Xamarin 绑定:
https://github.com/noties/Markwon
https://repo1.maven.org/maven2/io/noties/markwon/core/4.6.1/core-4.6.1.aar
我还没有修改metadata.xml
或任何东西。我已将 aar 添加为LibraryProjectZip
,但在尝试编译时遇到问题。
0>obj/Debug/generated/src/IO.Noties.Markwon.SpannableBuilder.cs(10,68):错误 CS0738:“SpannableBuilder”未实现接口成员“IAppendable.Append(char)”。“SpannableBuilder.Append(char)”无法实现“IAppendable.Append(char)”,因为它没有匹配的返回类型“IAppendable”。
0>obj/Debug/generated/src/IO.Noties.Markwon.SpannableBuilder.cs(10,68):错误 CS0738:“SpannableBuilder”未实现接口成员“IAppendable.Append(ICharSequence?)”。“SpannableBuilder.Append(ICharSequence)”无法实现“IAppendable.Append(ICharSequence?)”,因为它没有匹配的返回类型“IAppendable”。
0>obj/Debug/generated/src/IO.Noties.Markwon.SpannableBuilder.cs(10,68):错误 CS0738:“SpannableBuilder”未实现接口成员“IAppendable.Append(ICharSequence?, int, int)”。'SpannableBuilder.Append(ICharSequence, int, int)' 无法实现 'IAppendable.Append(ICharSequence?, int, int)' 因为它没有匹配的返回类型 'IAppendable'。
0>obj/Debug/generated/src/IO.Noties.Markwon.Utils.NoCopySpannableFactory.cs(56,79):警告 CS0108:“NoCopySpannableFactory.Instance”隐藏了继承的成员“SpannableFactory.Instance”。如果打算隐藏,请使用 new 关键字。
global::Java.Lang.IAppendable
出于测试目的,如果我从接口中删除,SpannableBuilder
我会走得更远,但它会在 Java 问题上中断:
1>obj/Debug/android/src/mono/io/noties/markwon/core/CorePlugin_OnTextAddedListenerImplementor.java(4,8): 错误 JAVAC0000 javac: 错误: CorePlugin_OnTextAddedListenerImplementor 不是抽象的并且不会覆盖抽象方法 onTextAdded(MarkwonVisitor,String ,int) 在 OnTextAddedListener 公共类 CorePlugin_OnTextAddedListenerImplementor
该类的生成代码在这里:
package mono.io.noties.markwon.core;
public class CorePlugin_OnTextAddedListenerImplementor
extends java.lang.Object
implements
mono.android.IGCUserPeer,
io.noties.markwon.core.CorePlugin.OnTextAddedListener
{
/** @hide */
public static final String __md_methods;
static {
__md_methods =
"";
mono.android.Runtime.register ("IO.Noties.Markwon.Core.CorePlugin+IOnTextAddedListenerImplementor, Markwon", CorePlugin_OnTextAddedListenerImplementor.class, __md_methods);
}
public CorePlugin_OnTextAddedListenerImplementor ()
{
super ();
if (getClass () == CorePlugin_OnTextAddedListenerImplementor.class)
mono.android.TypeManager.Activate ("IO.Noties.Markwon.Core.CorePlugin+IOnTextAddedListenerImplementor, Markwon", "", this, new java.lang.Object[] { });
}
private java.util.ArrayList refList;
public void monodroidAddReference (java.lang.Object obj)
{
if (refList == null)
refList = new java.util.ArrayList ();
refList.add (obj);
}
public void monodroidClearReferences ()
{
if (refList != null)
refList.clear ();
}
}
解决方案
我根据这个 SO 答案接受了建议:https ://stackoverflow.com/a/24169499/14977771
并创建了一个简单的包装器来调用我需要的函数。我的包装.aar
文件添加为LibraryProjectZip
,然后将markwon
库(及其依赖的 jar)添加为EmbeddedReferenceJar
.
它允许我只包装/调用我需要使用的函数,而无需为整个库创建绑定。
推荐阅读
- php - Symfony 3.4 新实体:语法错误或访问冲突
- python - 卷积神经网络模型在 keras 中没有学习任何东西
- c++ - 请对 cocos2d c++ 源代码结构提出建议
- html - 如何在不触及 ul 部分的情况下使引导滑块的内容居中?
- oracle - 在 PeopleSoft 中生成发票
- kubernetes - kafka - 向主题 test-topic 发送消息时出错,键:null,值:17 个字节,有错误
- c# - 统一处理异步协程
- javascript - 如何检查字符串中左括号和右括号的顺序?
- android - 使用毕加索禁用 recyclerview 自动滚动
- go - 卡在 Go 中的密码挑战 4