我对delphi调用第三方SDK的理解

去年就买了OrangeUI【FMX三方SDK服务-VIP】工具,前天听了王老师直播后,昨天第1次尝试着使用它,照着老师的步骤全部重新做了一遍,感觉很好,把实现过程和心得写出来,分享给大家。2020-11月,作者王老师开源了,大家要感谢他并向他学习,他的视频课程:https://v.youku.com/v_show/id_XMzM2MTc2ODQ0MA==.html

一、安卓

1、概念

JAR(计算机文件格式)

在软件领域,JAR文件(Java归档的文件,英语:Java Archive)是一种软件包文件格式,通常用于聚合大量的Java类文件相关的元数据资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。

JAR文件是一种归档文件,以ZIP格式构建,以.jar为文件扩展名。用户可以使用JDK自带的jar命令创建或提取JAR文件。也可以使用其他zip压缩工具,不过压缩时zip文件头里的条目顺序很重要,因为Manifest文件常需放在首位。JAR文件内的文件名是Unicode文本。

.jar文件的构成(符合MVC开发模式):

1.1、Java类文件(C)一般是将源文件.java编译后的.class文件,相当于在windows下delphi的源文件.pas编译后的.exe文件,只不过是多个.exe文件,它们之间可有关联性、可以相互调用,java将其提取出来单独在jar包中创建进一步的路径,可以包含常用约定俗成的bean、controller、net、protocol、utils、view目录及其它被调用的自定义目录,在其下及其子路径下放置相应的.class文件。它们是java代码的逻辑核心,是控制部分。

1.2、Java的元数据文件(M):相当于于delphi写的类所对应的运行时类信息RTTItype所包含字段、属性、方法的描述,java将其提取出来单独在jar包中创建了目录META-INF,在其下放置元数据的描述文件:MANIFEST.MF。它们是java代码的逻辑的元信息,是调用的信息列表,描述了.class类如何调用、调用些什么、是否存在对外资源的引用。

1.3、Java的资源文件(V)文本、图片及其xml描述等外部文件相当delphi的App可执行文件目录下的外部文件列表目录下的文件,java将其提取出来单独创建了类似res的目录,供.class类按照M元数据描述去调用它们是java代码的外部资源文件,C按照M加载的外部文件。

1.4、与.jar同级路径下可以附带一个Java描述文件,但不是必须的:AndroidManifest.xml,用于都上述进行进一步的描述和调用。

2、jar如何共享给第三方,即它的sdk软件开发包(如果你的应用需要开放,就类似这样构建)

2.1、方式:在.jar同级路径下分目录进行扩展,有这样一些路径结构:

2.2、路径结构:

符合java路径标准,比如com.tencent.liteav.demo.pla

2.2.1、com路径:其下放放公开的sdk中被调用的.class文件,这个是sdk核心的公开的功能代码的类,核心类库,其它功能的开发都通过它来扩展。

2.2.2、res目录:其下放第三方调用它所必须的资源文件,这个是可附属的必备条件。

在res文件夹下还可以定义一下级目录,比如:
    res/color  res/drawable  res/drawable-xxhdpi-v4  res/layout  res/values  
    res/anim:这里存放的是动画资源。
    res/xml:可以在Activity中使用getResource().getXML()读取这里的资源文件
    res/raw:该目录下的文件可以直接复制到设备上,不能有子文件夹,编译软件时,这里的数据不需要编译,直接加入到程序安装包中,使用方法是getResource().OpenRawResources(ID),其中参数ID的形式是R.raw.XXX。

会在R.java资源代码(C类)文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中的。

2.2.3、libs目录:其下放公开的sdk中被调用的.jar文件及其对应的.so动态库文件目录(文件目录最好分处理器平台:arm64-v8a、armeabi、armeabi-v7a、mips、x86等),相当于delphi的类库的路径,这个是sdk核心的公开的功能代码的接口。

2.2.4、JNI目录:其下放公开的sdk中附属的开放功能的那部分接口文件.so,相当于delphi的dll文件(文件目录最好分处理器平台:arm64-v8a、armeabi、armeabi-v7a、mips、x86等),相当于delphi的dll动态库的路径,这个是sdk附属的公开的功能代码的接口,可供调用者以android的JNI方式调用。

2.2.5、aapt目录:其下放AndroidManifest.xml描述文件,描述sdk发布的.so的版本及对res文件的引用规则,供重构资源代码R.Java及用JDK的jar命令进行重构编译类R.Class文件。参考:http://www.voidcn.com/article/p-pnbctjtd-wu.html :资源文件详解生成资源类文件(R.java)。

2.2.6、aidl目录:配置该库的build.gradle文件(Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。简单的说,Gradle是一个构建工具,它是用来帮助我们构建app的,构建包括编译、打包等过程。),其下的文件不是必须的。

2.2.7、assets目录:不会在R.java资源代码(C类)文件下生成相应的标记,assets文件夹可以自己创建文件夹,必须使用AssetsManager类进行访问,存放到这里的资源在运行打包的时候都会打入程序安装包中,对外共享sdk时,一般任何被调用的文件。

3、delphi调用第三方Android SDK集成的思路及步骤

3.1、下载 SDK + Demo 开发包,并仔细阅读官方开发及调用说明:很重要。

3.2、导入必须的aar(或jar)到工程中

    aar:本质是jar+其它的一些资源文件,包括其依赖的其它三方库:也是一种java归档文件,用户也可以使用JDK自带的jar命令创建或提取JAR文件

3.3、导入必须的依赖库jar到工程中

3.4、Android权限声明:在工程的AndroidManifest.xml中声明( 3.7的部署工具会自动写入)。

3.5、参考其Demo开发包

        Delphi调用的大概过程和方法是这样的:(这一步为了偷懒就不写了,请参考:)《Delphi在Android下使用Java库的方法》(特别注意:仅仅让你参考其中原生的过程:(1)、其中的Java2OP工具不太好用,请使用3.6、老猫的工具;(2)、另外:其中合并Dex的方法现在早不用了;(3)、请使用下面王老师的工具

3.6、转换其核心入口jar代码为pascal代码*.pas:用OrangeUI购买后附送推荐的老猫工具:JarOrClass2Pas_FlyingWang V1.0.2018.226 附赠 java 转 Jar.rarhttps://www.orangeui.cn/ ,联系他们购买【FMX三方SDK服务】,高性价比。

3.7、用OrangeUI部署和生成工具自动产生和部署aar对应的R.java源代码、编译文件R.Class,及其重新打包的jar文件:FMXSDK布署工具.rar,手工做很容易出错不好找原因,https://www.orangeui.cn/ ,联系他们购买【FMX三方SDK服务】,高性价比。

3.8、检查:添加到工程jar的是否全面,检查工程中的sdk核心入口转换文件*.pas,及其必须的sdk路径结构。

3.9、调用SDK核心方法使用其功能:详见sdk官方说明。

3.10、初次Build及Deploy工程:编译并分发必须的项目动态库

3.11、再次Build或运行工程:在项目动态库的基础上,编译、链接第三方jar和其aar的资源类包jar

二、IOS(待续)

三、本博客相关知识:

3.1、delphi XE关于Android四大组件之ContentProvider:案例delphi XE加载Android手机图片的效率:

https://blog.csdn.net/pulledup/article/details/105642380

3.2、续:看看Android四大组件之ContentProvider的内容提供者,我们还有哪些可在delphiXE中运用:

https://blog.csdn.net/pulledup/article/details/105699037

3.3、delphiXE关于Android四大组件五大存储六大布局的AndroidManifest.xml的设置(一)

https://blog.csdn.net/pulledup/article/details/105654758

3.4、我对学习delphiTeacher的《delphi调用及封装Android原生控件》的学习和研究点滴体会之(二)

https://blog.csdn.net/pulledup/article/details/105134381

3.5、Delphi版本信息Version Info(Android个性化AndroidManifest.template.xml包模板文件;IOS或OSX修改info.plist.template.xml

https://blog.csdn.net/pulledup/article/details/105220094

喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:

我对delphi调用第三方SDK的理解相关推荐

  1. uniapp生成android并调用第三方sdk的拍照进行身份证识别

    一.需求 uniapp生成android,集成商汤科技的android的sdk识别身份证信息 二.开发思路 uniapp使用Dcloudx软件的"原生打包",然后集成到androi ...

  2. react-native 调用第三方 SDK

    步骤一:android 文件修改 (1)In android/settings.gradle ... include ':VoiceModule', ':app' project(':VoiceMod ...

  3. 关于调用第三方sdk

    1.微信,qq分享 获取开发者平台的appid和secretid,在app.gradle里面进行配置 2.高德地图,也是获得value值 <meta-dataandroid:name=" ...

  4. 安卓第三方SDK打包成uni-app插件

    android studio版本和环境配置 android studio2021.1.1 gradle-6.5  ->  classpath 'com.android.tools.build:g ...

  5. 使用第三方SDK(如微信、qq、快看、头条等),调用接口405 Method Not Allowed

    使用第三方SDK(如微信.qq.快看.头条等),调用接口405 Method Not Allowed 错误描述:postman请求正常,但客户端调用后接口没有反应,但返回了405错误. 解决方法:第三 ...

  6. 隐私合规:检测第三方SDK调用的隐私权限

    隐私合规:检测第三方SDK调用的隐私权限 原文地址 隐私合规:检测第三方SDK调用的隐私权限 前言 看了一圈各大网站目前关于隐私合规检测的分享,发现大家几乎都是自己写一套动态代理.Hook或者ASM来 ...

  7. uniapp 调用安卓原生插件 安卓原生又调用了第三方sdk(第三方原生开发的aar怎么转成uni可以使用的aar)

    最近在做一个关于uniapp的项目,遇到一个需求.有一个原生开发的aar的原生插件,不是插件市场的,开发说明原生开发的插件不可以直接提供给uniapp使用,需要按照uniapp原生插件开发文档重新制作 ...

  8. 对第三方 SDK 依赖冲突,重新打个包试试

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 未经允许,不得转载. 一.前言 在开发 App 的时候,经常会有需要借助第三方 SDK 的情况.但是有时候多方 ...

  9. Unity 第三方SDK框架接入 (Android Studio)

    第三方SDK框架接入 (Android Studio)一 Android Android 与 Unity 交互: UnityPlayer.UnitySendMessage("string&q ...

最新文章

  1. 网页制作常见的问题(怎样兼容IE6/IE7/火狐浏览器)
  2. C#用 SendKyes 结合 Process 或 API FindWindow、SendMessage(PostMessage) 等控制外部程序
  3. tensorflow r1.5 版本差异调研
  4. 39、Power Query-Text.Combine函数应用
  5. java多线程同时运行_Java实现的两个线程同时运行案例
  6. 你真的知道Java同步锁何时释放?
  7. 3.CM3内核架构-寄存器
  8. [有限元]证明常应变三角形单元形函数面积分线积分公式
  9. (23)FPGA锁存器与缓冲器的区别
  10. TIOBE 6 月编程语言排行榜:Python 有望超越 C 语言成为第一名
  11. android jni示例_Android动画示例
  12. MySQL 字符集和校对
  13. 前大嗅万万没想到系列之520奇葩礼物大盘点,活着不好吗?
  14. 中断扫描方式子程序c语言,单片机原理及应用(C语言版) 第9章 节 单片机系统配置及接口.ppt...
  15. hybrid app支持html5,Hybrid App 接入
  16. nutch2.3.1 mysql_Nutch-NewsClassify
  17. 【资源帖】深度学习视觉领域常用数据集汇总
  18. patreon cg人物插画作品合集分享
  19. docker启动mysql报错Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use
  20. 烤仔TVのCCW | 带宽不可能三角(下)

热门文章

  1. 副族元素从上到下原子半径_原子的大小以原子半径来表示
  2. 杰理之设置立体声输出,播左右声道歌曲后DAC没有声音或声音变小
  3. 体验AI拜年新姿势,爱奇艺技术团队这波操作真秀!
  4. 几行CSS让你的页面立体起来
  5. 探花交友10-数据统计与内容审核
  6. Parallels Desktop克隆出来的虚拟机拥有相同的SSH KEY的修改方法
  7. 德州学院大学计算机,德州学院 计算机系 李天志老师简介 联系方式 手机电话 邮箱...
  8. 9个经典营销创业案例,彻底颠覆你的营销思维
  9. Ubuntu系统入门
  10. Ivor Horton's Beginning Visual C++ 2008