Android 贝宝 2.8.8 单声道包装器

Android Paypal 2.8.8 Mono wrapper

我开始为最新版本的 Paypal SDK 进行绑定,旧版本(也 2.x)的绑定工作正常,但是当我更新 jars 和 .so 库时它没有编译了。错误是生成的 class 无法找到它应该具有的接口(所有混淆的 classes)。 interface/type 不在命名空间中。我不确定如何开始解决这个问题。

我在这里上传了绑定项目: https://github.com/tom-mayer/Mono.Droid.Paypal

编辑:

我用反编译器对 jar 进行了处理,发现了以下内容: 具体错误是在生成的 class "O" 中,无法在给定的命名空间中找到接口 "IAF"。在 jar 文件中,"O" class 实现了接口 "aF"。代码生成器似乎无法将 "aF" 识别为接口,因此在生成代码时不会将其命名为 "IaF"。这个假设正确吗?

确实如此,可以通过添加

来解决
<attr path="/api/package[@name='com.paypal.android.sdk.payments']/interface[@name='aF']" name="visibility">public</attr>

到Metadata.xml。

编辑

下一个错误是所有实现另外两个接口的 classes 在生成的代码中缺少一个方法。界面(在反编译的 jar 中)需要

public abstract String a();
public abstract String a(String paramString);
public abstract String a(Enum paramEnum, String paramString);

待落实。生成的 C# 中存在前两个重载 class,但缺少带有 Enum 参数的重载。

我看了一下生成的api.xml,好像是生成了接口方法

<interface abstract="true" deprecated="not deprecated" final="false" name="aB" static="false" visibility="public">
    <method abstract="true" deprecated="not deprecated" final="false" name="a" native="false" return="java.lang.String" static="false" synchronized="false" visibility="public">
    </method>
    <method abstract="true" deprecated="not deprecated" final="false" name="a"     native="false" return="java.lang.String" static="false" synchronized="false"   visibility="public">
        <parameter name="p0" type="java.lang.Enum">
        </parameter>
        <parameter name="p1" type="java.lang.String">
        </parameter>
    </method>
    <method abstract="true" deprecated="not deprecated" final="false" name="a" native="false" return="java.lang.String" static="false" synchronized="false" visibility="public">
        <parameter name="p0" type="java.lang.String">
        </parameter>
    </method>
</interface>

有趣的是 class "aZ"(它实现了 aB)应该实现这三个方法,但在反编译的 jar 中没有实现 enum/string 重载。这怎么可能甚至在 java 中编译,因为它也不从可以实现缺失方法的基础 class 扩展?

有什么想法吗?

干杯

我最终只是简单地从接口中删除了这些方法,因为它们似乎没有在 java 源代码中实现或使用。

<remove-node path="/api/package[@name='com.paypal.android.sdk']/interface[@name='aB']/method[@name='a' and count(parameter)=2]" />
<remove-node path="/api/package[@name='com.paypal.android.sdk']/interface[@name='cC']/method[@name='a' and count(parameter)=2]" />

项目编译运行。我还删除了 card.io 部分,因为我不需要它。最终包装在 github.