|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2014/1/10 11:40:32 |
标题: |
XE5在Android中引用第三方jar的SDK的相关文章分享(截止目前2014-01-10) |
浏览:3264 |
|
加入我的收藏 |
楼主: |
首先声明,我还没有完全实现彻底的实例使用,实现调用但还是有碰到新问题,不过,这条实现路径的趋势已经很好了。
因此,贴一些已经完成的步骤所对应的文章,以便更多的朋友能参与探讨,解决问题。
先学习了Paul Foster的文章“Fun with external Java libraries”,英文不好,理解比较费劲。 并且,实验内嵌apk来调里面的类,成功;但实验内嵌jar来调里面的类,不成功。 文章网址:http://www.pclviewer.com/android/XE5.pdf
然后找到了这篇文章——“XE5 JNI starter kit - access JAVA CLASS from DELPHI FM XE5”,带一些图片的演示,比较容易理解了。 文章网址:http://www.pclviewer.com/android/androidJNI.html
截止目前,摸索到了可以把第三方jar包打入一个什么都不干的apk中(它可以是没有主界面的apk,用eclipse做的),然后在Delphi XE5的android程序内deploy到自己的目录下,供文章中的方法调用。
请用这条路成功应用的朋友们,也分享一下啊。 (我想实现的jar引入,主要有:阿里云的OSS SDK、JPush的消息推送SDK、微信的内容转发SDK等)
附: 如何在eclipse把第三方jar包、so包编译到一个apk中,请看这里: http://blog.csdn.net/thl789/article/details/7918093 http://www.th7.cn/Program/Android/201304/133264.shtml
----------------------------------------------
丢了编码快10年,现在重新捡起来! |
作者: |
|
2014/1/10 11:52:17 |
1楼: |
Mark
----------------------------------------------
-
|
作者: |
|
2014/1/10 13:41:42 |
2楼: |
mark
----------------------------------------------
-
|
作者: |
msfm (清洁工) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/1/10 13:48:39 |
3楼: |
mark
----------------------------------------------
-
|
作者: |
|
2014/1/10 14:14:27 |
4楼: |
thx mark
----------------------------------------------
-相互学习,共同进步! 努力每一天,不能望山跑死马 发上等愿,结中等缘,享下等福;择高处立,寻平处住,向宽处行
|
作者: |
|
2014/1/13 9:36:51 |
5楼: |
mark
----------------------------------------------
五毒公主 认准了delphi ,没经历学更多 就努力成功delphi高手吧
|
作者: |
|
2014/1/14 10:45:58 |
6楼: |
第三方 JNI SDK 调用开发
(* ********** *) (* *) (* 编写:爱吃猪头肉 & Flying Wang *) (* 上面的版权声明请不要移除。 *) (* *) (* ********** *)
请大家从群共享下载(① FireMonkey[DELPHI XE5] 165232328) java 文件 Classes.DEX 合并.zip 里头的 BuildDex.bat.utf8.txt 就是我们要讨论的重点。
我发现现在的 第三方 SDK 分 3 种。 1. HTTP 类的。webservice rest 等。用 INDY 控件 或 webservice rest 控件即可。 2. NDK SO 类的。大家看看 Androidapi.inc 和 Androidapi.NativeWindowJni 的内容,大家就知道如何调用了。EMB 代码中还有其他 SO 的。简单的说和 调用 DLL 差不多,就是不能 LoadLibrary。要静态定义接口。 3. JNI SO 类的。这种接口,给您 SO 的同时。会给您一些 JAVA 文件。
其中第 3 种里头还分 2 种。 3.1 JAVA 文件只有一个,就是 SO 文件的接口。 3.2 JAVA 文件很多,是对 SO 文件的再次封装。
我目前只知道 3.1 类型的做法。
先将 SO 文件发布到工程中。 打开工程后。 Project -> Deployment 打开的界面中 选择 configuration 选到 All configurations - All platforms 或者 All configurations - xxx platform。 在这个状态下 增加 或 删除 文件。 选择 新增 按钮,将 SO 文件加入。 然后编辑 RemotePath 列。路径是 \lib\armeabi ,就是和您的工程生成的 SO 文件放同一个目录。
然后 将 SDK 中的 JAVA 接口文件 带上路径 放入 SRC 目录。当然之前 SRC 里的文件目录都删了吧。 修改 BuildDex.bat 。 将里头的 JAVA 路径修改成您现在的路径。
顺便修改 BAT 中的各种路径定义。确保路径是正确的。
然后运行 BuildDex.bat 。
这样您就得到了带有 SDK 的 DEX 文件了。
这次您需要将 classes.dex 的发布修改下。不再从 EMB 的安装目录找这个文件,而是使用这个新生成的文件。
最后,您按照 群共享的文档 JNI 翻译 转 Delphi 的 经验 方法.txt 里头的说明,将您的 JAVA 接口文件翻译成对应的 JNI PAS 文件。
对于 3.2 类型的 SDK。 目前只能猜想 1. 直接将 JAR 和 DEX 合并,翻译 JAR 中的 大部分或者是有 JAVA 接口文件。 2. 想办法将 SDK 中的 JAVA 文件和 JAR 都和 DEX 合并。但是接口文件好像还是需要翻译的。
再补充点: classes.dex 可以多次合并的。如果您有多个 SDK ,可以都合并进去。
下面是本群的一些参考文件
JNI 翻译 转 Delphi 的 经验 方法 JarToDex批处理运行不了错误解决
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2014/4/4 13:22:45 |
7楼: |
jar好像是加载不了
load时总报错:
java.lang.ClassNotFoundException:
com.dynamic.DynamicTest in loader
dalvik.system.
----------------------------------------------
好好学习,天天上网。
|
作者: |
|
2014/4/4 13:26:31 |
8楼: |
Jar 已经用 dx.bat 处理过 在 Java版Android程序中可正常的 动态加载该 Jar 而同样的加载代码用Delphi写一遍就不行了
----------------------------------------------
好好学习,天天上网。
|
作者: |
|
2014/4/4 13:55:48 |
9楼: |
楼上的你 CLASSES.DEX 没发布吧。反正就是你操作没做好。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2014/4/8 17:26:52 |
10楼: |
应该没做错 后来用合并dex的方式成功了
----------------------------------------------
好好学习,天天上网。
|
作者: |
|
2014/4/8 17:28:39 |
11楼: |
楼上的,楼主就是合并啊。您这成功和失败,都很含糊啊。
----------------------------------------------
(C)(P)Flying Wang
|
|