Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 11402|回复: 9

让CodeTyphon支持Android开发的注意事项

[复制链接]

该用户从未签到

发表于 2012-11-4 21:37:26 | 显示全部楼层 |阅读模式
      默认的lazarus带的控件少,而Codetyphon却不能直接开发Android,经过近两周时间的折腾,终于找到了门路,这里的人气不高,希望能帮助到偶尔有需要的朋友,本来是在www.cnblogs.com/littlestone08当我自己的备忘的,想到有人也会走弯路,就贴到这里来了,如果要交流的话,希望在cnBlogs给我留言,毕竟,一个人很少会一直观注自己的旧帖子的。
提示我不允许发带链接的帖子,郁闷了,只好把和网址有关的东西去掉,看完整的去cnblogs的littlestone08用户看吧
-------------------------------------------------------------------------------------------------------------------------------
注意的事项有:
    [li]lazarus0.9.3.1版本以后的LCL才支持Android,所以lazarus必须使用大于此版本号的作为开发环境。[/li][li]fpc在2.6及2.7后继的版本中去掉了Android的编译支持,需要使用2.5.1的版本来作为ppcrossarm的编译器。否则会出现找不到ld.so.3等错误,虽然有一些使用-FLlibdl.so 或 -FLlinker -sh 生成脚本(配置使用ppas.sh并修改资源文件)的办法来回避此问题,但经过测试,似乎并不能在apk上应用。[/li][li]fpc2.5.1在fpc2.4上编译能顺利完成。但是在高版本的编译器似乎不顺利,如果要编译2.5.1版本,需要预装2.4.1的FPC,编译成功后,再删除。[/li][li]NDK使用r7或r7b版本在目前的Lazarus1.0.2中并没有问题,早期根据网上的资料,有BUG存在,但是在当前的测试中,并没有发现问题。[/li]

编译环境的过程
参考,并在下面有一个副本,需要注意的问题有以下几点
    [li]关于Bintuils,Android的汇编器as是EABI5的形式,而默认的LINUX一般都是0,需要在调用as的时候加上 -EABI 5 $@ 的参数来调用,尤其是使用预编译器2.5.1的时候,bintuils目录应该处于/usr/local/bin中,好像当时编译的时候路径就是这样的,所以使用的时候要还原当时的编译环境[/li][li]如果要使用预编译的ppcrossarm,需要在/usr/bin建立一个ppcarm软件链接,因为fpc是使用ppcarm来进行调用的。[/li][li]关于.fpc.cfg的配置:要包含原默认的fpc.cfg,并要正确设置参数,比如,我的预编译工作放在我的工作目录中,目录结构为[/li]


mei@mei-ubuntu:~/FPC4Android$ lsarm-linux-as  arm-linux-as_org  ppcrossarm  unitsmei@mei-ubuntu:~/FPC4Android$ pwd/home/mei/FPC4Android
则配置文件如下

#INCLUDE /etc/fpc.cfg
#DEFINE DEMOTEST
#DEFINE DEMOTEST1
#DEFINE LAZARUS
-Fu/home/mei/FPC4Android/units/$fpctarget/*
-Fl/home/mei/FPC4Android/units/$fpctarget/rtl/
-a
-Sd
-Xd
-Xs
-O-
#IFDEF CPUARM
-XParm-linux-
-Xr/home/mei/FPC4Android/units/arm-linux/rtl/
-darm-Tlinux
#ENDIF


上面设置则可以工作。如果用源码编译,参考下面的模板
#INCLUDE /etc/fpc.cfg
#DEFINE DEMOTEST
#DEFINE DEMOTEST1
#DEFINE LAZARUS
-Fu/usr/lib/fpc/2.5.1/units/$fpctarget/*
-Fl/usr/lib/fpc/2.5.1/units/$fpctarget/rtl/
-a
-Sd
-Xd
-Xs
-O-
#IFDEF CPUARM
-XP/home/user/lazarus/fpc/binutils/
-Xr/usr/lib/fpc/2.5.1/units/arm-linux/rtl/
-Xr/home/user/lazarus/fpc/libcross
-XR/home/user/lazarus/fpc/
-darm
-Tlinux
#ENDIF


如果编译的时候无法在lazarus的 -Fl参数中设置Android NDK的lib,则可以使用-k 界面功能使用传递-l<库>的方式尝试,我有一次就出现这种上情况,暂不知道原因。
关于Codetyphon
同样用上面的方法,在Codetyphon2.8的Lazarus版本中,console的arm可正常编译,但是AndroidLCL例程无法正常进行,在编译lcl的时候会出现语法错误,察看代码后因为是编译器的版本的原因,新版本的Lazarus用的是新版本的编译器,代码中对版本进行了条件编译,致使在旧版本中编译不能通过,,如果把Codetyphon中的lazarusl的lcl用可以编译通过的lazarus版本进行把lcl目录替换,则可以正常为编译过去,并且正常生成so库,成功的在手机上运行。这个办法不是好办法,另一个办法是使用新版本的可以支持的Android的编译器,网上可以找到2.6版本的支持Android的ppcrossarm的预编译器,安装上以后,可以正常编译AndroidLCL例子。
LINUX上暂时没有测试,应该差不多的,因为曾经在测试的时候也遇到过相同的问题,只是当时没有想到用标准版本的lcl替换。
关于Codetyphon安装脚本的发布速度,Linux版本都落后于Windows版本的发布,如果使用windows版本的话,as工具直接是与Android NDK的lib的EABI值相同的,可以直接使用其编译出的Binutils.
由于平时在Linux下面折腾CodeTyphon, 相比之下,WINDOWS版本的Codetypho编译之慢,资源占用之多,简直可以不可以接受,我差点以为编译lazarus big IDE时死掉了,但由于WIN平台上没有gcc,所以使用起来简单得多,缺点是比较慢。LINUX下面的版本就快多了,但需要更深入的了解一下LINUX相关的东西,要求更多的动手能力。


关于无法找到libxxxx.so的情况

这种情况归根结底是由于fpc不准备再支持Android平台上的编译造成的,由于Android的gcc及库与标准的gcc的不兼容(使用了优化过的libc也就罢了,结果连动态库加载都不使用ld而使用linker了,造成如果你只能使用静态库的方式来进行编写,否则接标准的办法是无法移值到Android的),虽然2.5.1版本的ppcossarm for Android解决了最基本的ld.so.x的链接问题,但是要是你使用了线程,就只有哭的份了。

根据以上情况我个人认为,如果想用这个已经不被官方支持的ppcrossarm for Android,最好不要写太复杂的东西,不要有依赖的功能函数,这就大大限制了发挥的空间。
(补)关于Ant:
看论坛的帖子,很多人没有注意到Ant是做什么用的,用绿色版本的FPC4Android似乎根本没有用到它。它的功能之一就是APK打包,绿色版本中的key生成和打包两个bat,可以直接用ant 替代,修改完local.properties文件后,直接简单输入ant debug install,就可以完成key ,build apk , install的全部过程,需要的朋友可以查下相关的资料。



一个小插曲,当我在长时间忍受了LAZARUS BIG IDE的编译后,悲剧的发现,IDE没有messages   windows,编译的提示,出错提示,什么也看不到。结果搜索网上资料说是因为docking插件引起的,它把messages box 停靠在Edit source 窗口上了,而且不可见。解决的办法就是移除docking控件包,并且删除lazarus的用户配置目录,当然再次编译是避免不了的。
可以在Android上使用的ppcrossarm的2.6.1版本虽然网上有,经过本人测试并且可以用在新版本的lazarus上,但是由于官方不再支持,也就不再贴出来了,因为网上都是源码+patch的,需要自己编译,预编译的版本经过测试,总是提示ppu的版本有问题,可能是因为制作者误认为ppu是通用的原因,只给了一个平台版本的原因吧,实际上是不能使用的。
话说由于可以自由从SVN下载最新版本的FPC和Lazarus的原因,造成使用者的对版本的混乱,同样的版本号,代码有可能是不同的,所以在自己编译代码的时候,一定要按教程上写明的svn 的 revision号来进行


附:
FPC4Android预编译下载地址

评分

参与人数 1威望 +8 收起 理由
bugxiong + 8 优秀文章,支持!n神马都是浮云!

查看全部评分

回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-11-4 21:39:39 | 显示全部楼层
带链接的地址在http://www.cnblogs.com/littlesto ... /10/27/2742444.html,真不知道要发够10贴才能上链接是基于什么考虑
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-11-5 09:04:47 | 显示全部楼层

回 1楼(fpcstone) 的帖子

fpcstone:带链接的地址在http://www.cnblogs.com/littlesto ... /10/27/2742444.html,真不知道要发够10贴才能上链接是基于什么考虑 (2012-11-04 21:39) 
广告太厉害了,怕广告ID
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-11-5 19:41:42 | 显示全部楼层
感恩~最近剛好在開發Android的東西,雖然現在介面的部份用Java,核心才用Lazarus透過JNI編譯成native code......不過還是看好Lazarus未來,希望有天能完全用Lazarus開發完整程式.......
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-11-5 20:44:18 | 显示全部楼层
呵呵,想不到管理亲自来回答,就凭这一点,以后有感觉值得记录的经验一定再写出来。FPC这么好的东西在我们这里只能在小圈子里玩,可惜了,因为盗版DELPHI几乎是没有成本 的。大家有经验也经常来贴一贴啊。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-11-8 10:45:39 | 显示全部楼层
我用的codetyphon 2.9 版本,卸载pl_glassdocking就可以显示message窗口了,哪位的编译信息不显示,那就在包中卸载pl_glassdocking,然后重新编译IDE。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-11-8 11:11:22 | 显示全部楼层
确实啊,感觉codetyphon发版很仓促,新是新,但是每个版本发版的时候都是拿用户当小白鼠的最新但不是稳定的版本。当前的lazarus版本,官方还没有正式出1.1呢,现在人家早就1.1了,FPC也是最新的。

回头看看我的这个注意事项,排版真是乱,还是加精的,我看了都不好意思啊
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-11-8 11:14:09 | 显示全部楼层
想用lazarus开发android的人,最好还是放弃了,因为fpc在2.5以后就不再支持android的编译了,因为android 与linux下的库很不相同,动态库加载也不同,可能是因为这个原因吧,放弃了。

如果你不调用动态库写个函数功能什么的还可以接受,但是幻想用来写应用,不要要不要谨慎,而是基本上不可能的了
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-11-8 11:26:24 | 显示全部楼层

回 7楼(fpcstone) 的帖子

fpcstone:想用lazarus开发android的人,最好还是放弃了,因为fpc在2.5以后就不再支持android的编译了,因为android 与linux下的库很不相同,动态库加载也不同,可能是因为这个原因吧,放弃了。

如果你不调用动态库写个函数功能什么的还可以接受,但是幻想用来写应用,不要要不要谨慎,而是 .. (2012-11-08 11:14) 
这样呀。 谢谢你补充说明。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-8-30 23:35:56 | 显示全部楼层
好资料,正好用上,可以少走弯路,多谢了。
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-8-28 02:46 , Processed in 0.078540 second(s), 13 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表