今天群里面有兄弟伙说第三方库用不起。说实话在我觉得第三方库能成功的几率大于90% 除了极少数恶心的库以外。

绝大部分第三方库都还是可以绑定好的

https://github.com/youzan/YouzanMobileSDK-Android

这个是官方的也有对应的demo

首先遇到绑定库 我会第一时间nuget查询下 虽然这种库很少有人会用。但是万一有人绑定了呢?

然后 我会在github搜索下有木有好心的人绑定了

这2个方法后都没得人绑定 好吧 那就我自己开撸

首先安卓的绑定绝对比ios绑定容易得多 耐心细心慢慢来肯定可以解决

先下载官方的 用as打开跑起来  没问题 好的 官方无坑。 (一定记得这一步 不然万一官方的有坑你自己又在撸会哭的)

接下来 准备一个2个工具  ILSpy.exe     Jd-gui.exe

然后先看下官方依赖的库有那些 这一步很重要

用相关的gradlew 去查看相关依赖 具体百度 Android Studio 依赖查看

目前我查出来依赖了

systemweb-2.0.9

sdk-analytics-0.4.7
youzansdk-6.3.5
anko-commons-0.10.0
anko-sqlite-0.10.0
gson-2.8.0
okhttp-3.8.1
okio-1.13.0
basic-6.3.5

webcache-2.2.0

jsbridge-2.0.2

这里面如果是aar 记得要单独建一个绑定类库

开始绑定

第一步绑定basic-6.3.5 .aar 的时候就发现有个YouzanBrowser类无法生成 这个时候 打开

查看所有文件

打开这个文件夹 然后查看 里面有个 classs.jar  用jd-gui.exe 工具反编译查看下类的结构

然后用xml语法进行编辑修改  请记住 官方的自动生成只是简化这个步骤而已. 对写得很好的库完全没问题  但是有些国内厂商写得并不好 一堆乱 意味着你就放弃掉这些好了 直接自己来写

首先remove-node 移除掉编译出错的节点

<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" />
语法是 xpath 语法 操作的对象是什么对象呢?  是一个xml文件

api.xml  是工具帮你生成的 有时候你记不住语法 可以参考下

api.xml.fixed  是经过修改后生成的(经过你的xpath处理 也就是一直在说的Metadata.xml 文件)

好了 其他都不重要 记住 如果你发现编译一堆语法错误 首先 直接remove掉这些节点和错误的类

然后根据项目需要那些api方法和类 直接自己生成

我们需要YouzanBrowser 这个对象 用jd-gui打开对应的class.jar

这不是我们需要的类吗?为什么生成不了? 大部分都是因为依赖的第三方库 第三方的类和对象无法解析 接口实现等 都会有这个问题。我们不管先看下

涂抹的内容不重要

只看一个Package  class名字 继承关系

<add-node path="/api/package[@name='com.youzan.androidsdk.basic']"><class abstract="false" deprecated="not deprecated" extends="android.webkit.WebView" extends-generic-aware="java.lang.Object" final="false" name="YouzanBrowser" static="false" visibility="public"></class></add-node>

这里面的名字 大家英文好 看看就行  需要注意的是2个东西

extends 如果没有特殊的需要可以不用继承特定的类型 直接继承Object 即可   但是我们这里由于需要一个特定类型的 在代码里面 所以设定他继承 android.webkit.WebView  具体的类型大家可以看他jd-gui 的源码

然后就是添加需要的方法

  <constructor deprecated="not deprecated" final="false" name="YouzanBrowser" static="false"  visibility="public"><parameter name="context" type="android.content.Context"></parameter></constructor><method abstract="false" deprecated="not deprecated" final="false" name="pageGoBack" native="false" return="boolean" static="false" synchronized="false" visibility="public"></method><method abstract="false" deprecated="not deprecated" final="false" name="reload" native="false" return="void" static="false" synchronized="false" visibility="public"></method><method abstract="false" deprecated="not deprecated" final="false" name="onPause" native="false" return="void" static="false" synchronized="false" visibility="public"></method><method abstract="false" deprecated="not deprecated" final="false" name="destroy" native="false" return="void" static="false" synchronized="false" visibility="public"></method><method abstract="false" deprecated="not deprecated" final="false" name="onResume" native="false" return="void" static="false" synchronized="false" visibility="public"></method><!--boolean receiveFile(int paramInt, Intent paramIntent);--><method abstract="false" deprecated="not deprecated" final="false" name="receiveFile" native="false" return="void"static="false" synchronized="false" visibility="public"><parameter name="paramInt" type="int"></parameter><parameter name="paramIntent" type="android.content.Intent"></parameter></method><method abstract="false" deprecated="not deprecated" final="false" name="loadUrl" native="false" return="void"static="false" synchronized="false" visibility="public"><parameter name="paramString" type="java.lang.String"></parameter></method>

这样非常简单根据反编译出来的对象 类型进行调整和命名即可 也不用扣破头的想生成的咋不对呢 等等问题.  接口也是类似的处理逻辑

如果编译不通过 可以查看输出 里面会有详细的提示

把所有的绑定编译通过后  记得 加入相关依赖库 就是你最初查找出来的

有时候智能提示会出现卡壳  那怎么知道我要的类是否生成出来? 可以借助IlSpy 看下 如果出来了 即使 demo里面有波浪号也不管他 只管编译即可

开始写个demo跑跑看

开始遇到第一个深坑。

  java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/internal/Intrinsics;

第一个崩溃的异常出现 。查询任何资料都没有Xamarin相关的介绍。你会觉得神经病啊 啥垃圾Xamarin。。。 其实不是 如果你做安卓原生开发就会知道 使用kotlin的库的时候 java这边需要引入一个stblib

我们Xamarin早就提供了 nuget 搜索下

加入这个库再运行 就不会报错了

至此整个流程完毕

如果运行过程出现

Java.Lang.NoClassDefFoundError: Failed resolution of: Lorg/jetbrains/anko/db/ManagedSQLiteOpenHelper;
NoClassDefFoundError  请检查下依赖的第三方jar 是否已经打在你绑定库里面   记得 一定要先清理 再编译 否则 会让你觉得崩溃 明明添加了 结果还是 没找到 记得清空
跑下吧 
我 已经放在github上了

   

https://github.com/jsonsugar/XamainAndroidBindLibary

转载于:https://www.cnblogs.com/jasondun/p/9215572.html

13、最新安卓Xamarin绑定相关填坑之旅相关推荐

  1. unity android 分包,Unity以分包(obb)形式集成到安卓原生 我慢慢填坑

    Unity以分包(obb)形式集成到安卓原生 我慢慢填坑 Unity以分包(obb)形式集成到安卓原生 我慢慢填坑 工作中有需要将unity项目集成到安卓原生中,随着工作推进需要分包去发布到googl ...

  2. 【填坑之旅】手把手教你如何用AndroidStudio上传自己的library到Jcenter库

    [填坑之旅]手把手教你如何用AndroidStudio上传自己的library到Jcenter库 前言:我们在使用AndroidStudio的时候,会经常用到第三方的代码库.引入第三方库的方式无非就是 ...

  3. Jenkins项目实战之-MacOS High Sierra自动化打包方案的填坑之旅

    前面我介绍了如何在android和iOS实现公司内部app的自动化打包构建的过程.这里写一个关于这个app自动化打包平台从想法到实践再到放机房平稳运行的一个回忆录.总的来说,在jenkins上实现an ...

  4. React Native填坑之旅--动画篇

    React Native填坑之旅--Button篇 React Native填坑之旅--动画 React Native填坑之旅--HTTP请求篇 动画是提高用户体验不可缺少的一个元素.恰如其分的动画可 ...

  5. 一次动态代理的填坑之旅

    转载自  一次动态代理的填坑之旅 背景 想在现有的接口加上熔断降级或者限流的功能,比较好的方式是通过注解的方式,并基于动态代理进行实现,下面代码是Rhino的实现 @Rhino public clas ...

  6. 《Getting Started with D3》填坑之旅(六):第三章(下)

    Chapter 3. Scales, Axes and Lines(比例尺.坐标轴与线) (接上篇:<Getting Started with D3>填坑之旅(五):第三章(上)) 示例2 ...

  7. AppCode Updating indexes一直不停的填坑之旅

    最近在做APP安装包瘦身,找到了传说中的AppCode神器. AppCode 提供了 Inspect Code 来诊断代码,其中含有查找无用代码的功能.它可以帮助我们查找出 AppCode 中无用的类 ...

  8. 关于Echarts的填坑之旅

    正如标题所说,这是Echarts的一遍填坑,如果你是一些echart的配置的话可以阅读 http://echarts.baidu.com/opti...的官网配置信息.今天我想给大家分享的是一些我前段 ...

  9. 微信云托管-填坑之旅

    微信云开发开始收费了,一个月20块钱,贼贵,用不起.而按用量收费.资源还能复用的兄弟产品微信云托管还像还行.所以就有了一场填坑旅行. windows10下安装docker之坑 在本地开发,需要使用do ...

最新文章

  1. Ubuntu系统执行shell 脚本的方法
  2. ThinkPHP读取数据库数据到模板文件
  3. Windows Server 2012 R2 WSUS-13:部署二级WSUS
  4. #define用法集锦[修正版]
  5. python3 写文件时指定文件名_Python3基础 os listdir 列举指定的所有文件及文件夹的名字...
  6. hdu1285 拓扑序
  7. 将jOOQ与Spring结合使用:配置
  8. 如何仅通过CSS实现多行文本超长自动省略号
  9. 编写一个程序,计算|X-Y|的值,并将结果存入RESULT单元中,其中X和Y都为带符号字数据。
  10. 快速入门 Jupyter notebook
  11. 【Python CheckiO 题解】Second Index
  12. 手机python 3.8解释器_不看后悔!Python 3.8 新功能大揭秘
  13. CentOS下使用Varnish为网站加速
  14. python绘制条形图例题_[宜配屋]听图阁 - Python+matplotlib+numpy绘制精美的条形统计图...
  15. 厉害!他33岁破格晋升教授和博导,成果还打破国外技术垄断
  16. hdu5294||2015多校联合第一场1007 最短路+最大流
  17. CLEAR: Contrastive Learning for Sentence Representation
  18. 专升本英语——应试题型突破——阅读理解——阅读理解概述【学习笔记】
  19. RT-Thread柿饼控件(1)-- AnimatedImage
  20. 微信小程序数组更新,但视图不更新的问题

热门文章

  1. 使用Brainwash人头数据集训练SSD_MobilenetV1训练自己的模型
  2. 第一次使用国产芯片--芯旺微--KungFu--ChipOn
  3. AndroidStudio 格式化代码
  4. 一款简单的电脑桌面壁纸软件
  5. 【python程序设计】基础知识
  6. 演讲干货 | 招聘版「狼人杀」详解,企业面试提效增速神器
  7. 「Arm Arch」 虚拟化微架构
  8. 程序员不可错过的机会:2022校招礼盒曝光,大厂开始送“元宇宙”了?你还不心动么?
  9. [luogu1768]天路
  10. Apache+Tomcat+mod_jk配置教程