gpt4 book ai didi

java - 构建 Xamarin App 后 Jar 中缺少方法和类

转载 作者:搜寻专家 更新时间:2023-11-01 09:43:15 24 4
gpt4 key购买 nike

因为我想用 Estimote Beacons 开发一个应用程序,所以我搜索了它并找到了 Xamarin 组件 Estimote SDK for Android .但是,该版本已过时,因此我开始尝试在自己身上包含适用于 android 的 estimote sdk。用.aar/.jar bundle 。我看到了三个选项:

  • 完全编译库并能够将其用作 C# 类
  • 写一个包装器,只让包装器解释和使用那些类。
  • 使用 JNI 从库中本地调用函数

由于构建时出现大约 102 个错误,无法编译整个库。尽管我能够将错误数量减少到 45,但使用 metadata.xml 没有用。使用 JNI 本地调用函数很痛苦,而且别无选择,因为库太大了。

写一个包装器几乎成功了

我从 estimotesdk.aar 中剥离了类,所以我只有内部的 classes.jar。编写一个库作为包装器并将其放入另一个 jar 中:

  • EstimoteSDK.jar --> ReferenceJar
  • EstimoteWrapper --> EmbeddedJar

我可以在 Visual Studio 中毫无问题地构建 ClassLibrary 项目。我什至可以在 C# 中使用 Wrapper 中的类。但现在我的问题是:

运行时出现 MissingMethodException 和 NoClassDefFoundError

我发现了以下内容:EstimoteSDK.jar 及其类文件在构建后发生变化。由于某些原因,EstimoteSDK.jar不仅被复制而且被修改,丢失了一些功能甚至类。证明(使用 dex2jar 工具从构建的 apk 中的 .dex 中获取 jar): The right class File contains less functions than the right右边的类 File 包含的函数比右边的少

现在我的问题:

如何防止 Xamarin 或任何其他组件接触 EstimoteSDK.jar 并从中剥离函数和类?


设置:

  • Visual Studio 2015 专业版
  • Xamarin.Forms 2.0
  • Windows 7
  • Android 和 iOS 应用

最佳答案

所以,在将我的问题发布到 xamarin forums 之后有人提供了 estimotesdk 的更新版本(到目前为止我还没有尝试过)并尝试了我能想到的一切我找到了适合我的解决方案:

我有两个 Jars(EstimoteSDK 和我自己写的 Wrapper)。将它们包含在正确的构建操作中对我来说是这样做的:


  • EstimoteSDK.jar --> EmbeddedReferenceJar
  • 列表项 --> EmbeddedJar

All other files in this Project were not touched by me


所以这是包含由包装类访问的 native 库的正确方法。

关于java - 构建 Xamarin App 后 Jar 中缺少方法和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38967851/

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