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.
我开始为最新版本的 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.