我对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。

(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