Lazarus中文社区

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

QQ登录

只需一步,快速开始

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

让我的第一个安卓程序跑起来

[复制链接]

该用户从未签到

发表于 2015-2-11 21:02:55 | 显示全部楼层 |阅读模式
本帖最后由 cuibq 于 2015-2-12 17:19 编辑

    根据delphicn的帖子说明(http://www.fpccn.com/thread-1684-1-1.html),又经delphicn大大亲自指点,终于在我的魅族上跑起来,好高兴!

    * 2015.2.12 可以在java1.7环境运行了。(修改了签名命令 jarsigner 的参数)

   

加了tchart组件,在pda上是这么个效果,横屏后居然能自动调整,大赞!


上面画图仅仅用了几行代码几分钟而已,太爽了。


    下面记录一下过程。
    1、需要的软件:
adt-bundle-windows-x86-20130917.467161976.rar
android-ndk-r10c-windows-x86.exe
laz4android1.3-46592-FPC2.7.1.exe

adt-bundle-windows-x86-20130917中的jdk-7u45-windows-i586.1454527248.exe要安装一下。
(打包成一个了 http://pan.baidu.com/s/1gdF1ENp

    2、各软件安装位置:
开始时因为安装位置与后面批处理文件内容不匹配,导致出现不少问题。
java:
C:\Java\jdk1.7.0_45

android-ndk-r10c 、android-sdk、laz4android 都放在D:\

    3、运行laz4android 后,打开例子,修改配置 Project -> Project Options  -> Path -> Libraries,修改其中的两个路径。保存配置。


    4、直接ctrl+F9编译成功。
可以看到编译成的so文件:
D:\laz4android\examples\androidlcl\android\libs\armeabi\liblclapp.so

    5、修改并运行两个批处理文件。
第一个:D:\laz4android\examples\androidlcl\android\generate_debug_key.bat(这个用来生成签名文件)
我把它的内容弄成这样:
REM Adjust these paths to yours
SET PATH=D:\android-sdk\tools;D:\android-sdk\platform-tools\;D:\android-sdk\build-tools\android-4.3\;C:\Java\jdk1.6.0_39\bin\;C:\Java\jre6\bin\
SET APP_NAME=androidlcltest
SET ANDROID_HOME=D:\android-sdk
SET APK_SDK_PLATFORM=D:\android-sdk\platforms\android-8
SET APK_PROJECT_PATH=D:\laz4android\examples\androidlcl\android
mkdir bin
keytool --help
keytool -genkey -v -keystore bin\LCLDebugKey.keystore -alias LCLDebugKey -keyalg RSA -validity 10000
REM call and pause together allow us to see the results in the end
pause

第一个运行,按要求输入各种姓名省份等,密码用123456,如果用其他密码,下面的批处理中123456处也要做出修改。
其中一步:正确吗?   [  输入Y然后回车。


第二个:D:\laz4android\examples\androidlcl\android\build_debug_apk.bat(这个用来生成签名后的apk文件)
REM Adjust these paths to yours
rem SET PATH=D:\android-sdk\tools;D:\android-sdk\platform-tools\;D:\android-sdk\build-tools\android-4.3\;C:\Java\jdk1.6.0_39\bin\;C:\Java\jre6\bin\
SET PATH=D:\android-sdk\tools;D:\android-sdk\platform-tools\;D:\android-sdk\build-tools\android-4.3\;C:\Java\jdk1.7.0_45\bin\;C:\Java\jdk1.7.0_45\jre\bin\;
SET APP_NAME=androidlcltest
SET ANDROID_HOME=D:\android-sdk
SET APK_SDK_PLATFORM=D:\android-sdk\platforms\android-8
SET APK_PROJECT_PATH=D:\laz4android\examples\androidlcl\android
REM Create necessary directory Structure
mkdir bin
mkdir bin\classes
mkdir gen
mkdir gen\com
mkdir gen\com\pascal
mkdir gen\com\pascal\lcltest
mkdir raw
mkdir raw\lib
mkdir raw\lib\armeabi
REM Cleanup
del bin\%APP_NAME%.ap_
del bin\%APP_NAME%.apk
del raw\lib\armeabi\*.so
REM More directory preparation
copy libs\armeabi\*.so raw\lib\armeabi\
REM Resource compilation
call aapt p -v -f -M AndroidManifest.xml -F bin\%APP_NAME%.ap_ -I %APK_SDK_PLATFORM%\android.jar -S res -m -J gen raw
REM Java compiler
call javac -source 1.6 -target 1.6 -verbose -encoding UTF8 -classpath %APK_SDK_PLATFORM%\android.jar -d bin\classes src\com\pascal\lcltest\LCLActivity.java
REM Convert the java bytecode to dalvik bytecode
call java -Djava.ext.dirs=%ANDROID_HOME%\platform-tools\lib\ -jar %ANDROID_HOME%\platform-tools\lib\dx.jar --dex --verbose --output=%APK_PROJECT_PATH%\bin\classes.dex %APK_PROJECT_PATH%\bin\classes
REM It seams that dx calls echo off
@echo on
REM Now build the unsigned APK 建立一个未签名的apk
del %APK_PROJECT_PATH%\bin\%APP_NAME%-unsigned.apk
call java -classpath %ANDROID_HOME%\tools\lib\sdklib.jar com.android.sdklib.build.ApkBuilderMain %APK_PROJECT_PATH%\bin\%APP_NAME%-unsigned.apk -v -u -z %APK_PROJECT_PATH%\bin\%APP_NAME%.ap_ -f %APK_PROJECT_PATH%\bin\classes.dex

REM Signing the APK with a debug key 签名部分
del bin\%APP_NAME%-unaligned.apk
rem jarsigner -verbose -keystore bin\LCLDebugKey.keystore -keypass 123456 -storepass 123456 -signedjar bin\%APP_NAME%-unaligned.apk bin\%APP_NAME%-unsigned.apk LCLDebugKey
jarsigner -verbose -sigalg MD5withRSA  -digestalg SHA1 -keystore bin\LCLDebugKey.keystore -keypass 123456 -storepass 123456 -signedjar bin\%APP_NAME%-unaligned.apk bin\%APP_NAME%-unsigned.apk LCLDebugKey


REM Align the final APK package
zipalign -v 4 bin\%APP_NAME%-unaligned.apk bin\%APP_NAME%.apk
REM call and pause together allow us to see the results in the end
pause



    6、运行上面两个批处理后,可以看到,在目录 D:\laz4android\examples\androidlcl\android\bin 中生成了以下内容:

    然后安装androidlcltest.apk到安卓设备即可。

    7、期间的错误处理:
    * 运行 build_debug_apk.bat 出错:
D:\laz4android\examples\androidlcl\android>jarsigner -verbose -keystore bin\LCLD
ebugKey.keystore -keypass 123456 -storepass 123456 -signedjar bin\androidlcltest
-unaligned.apk bin\androidlcltest-unsigned.apk LCLDebugKey
jarsigner: 找不到 LCLDebugKey 的证书链。LCLDebugKey 必须引用包含专用密钥和相应
的公共密钥证书链的有效密钥库密钥条目。
    解决:原来我修改过 generate_debug_key.bat,把LCLDebugKey.keystore -alias LCLDebugKey 改成 LCLDebugKey.keystore -alias LCLDebugKey.keystore了,导致了上面的错误。
---------------------------------------------------
    * androidlcltest.apk在安卓上安装时,提示:程序未能安装。
    原因:签名错误。java1.7改成1.6后解决。不过现在已经可以用1.7了。

    今天是小年,祝各位小年愉快。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x

评分

参与人数 1金钱 +5 好评度 +1 收起 理由
delphicn + 5 + 1 Lazarus有你更精彩!

查看全部评分

回复

使用道具 举报

该用户从未签到

发表于 2015-2-12 10:43:46 | 显示全部楼层
鼓掌。期待手机应用越走越广。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2015-2-12 10:48:19 | 显示全部楼层
不错啊 !
对了,所谓的安卓不也是基于Linux核心的OS么?请问:用Lazarus能否直接开发原生态的(直接操作OS的)代码的呢?!
不知为何,一看到Java这种要在虚拟机上运行的东西,心里就像隔着一层膜,很不爽快 ...
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2015-2-12 13:35:16 | 显示全部楼层
canglong 发表于 2015-2-12 10:48
不错啊 !
对了,所谓的安卓不也是基于Linux核心的OS么?请问:用Lazarus能否直接开发原生态的(直接操作O ...

我是这样理解的:我觉得执行文件是直接执行的二进制机器码,解压缩这个apk可以看到liblclapp.so文件,这文件并不需要在java的虚拟机上运行。只是打包时需要java环境而已。实际上主要工作量还是在lazarus,只是初次使用打包apk需要摸索一下而已。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2021-8-26 17:08
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2015-2-12 16:01:03 | 显示全部楼层
    好。造福后来者,为Lazarus发展共同努力!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-2-13 08:18:16 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 2516 天

    [LV.Master]伴坛终老

    发表于 2015-4-20 14:15:30 | 显示全部楼层

    好。造福后来者,为Lazarus发展共同努力!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-8-27 22:58:36 | 显示全部楼层
    Lazarus 确实可以写Linux程序,不过要用Lazarus for linux的版本,
    而不是delphicn大的Lazarus for android的版本
    两者用的库并不相同~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-11-30 10:21:47 | 显示全部楼层
    好贴
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-16 08:43:36 | 显示全部楼层
    当年试了下,也可以在安卓上跑,但很多UI控件会显示不出来,而且很多属性没效,也不知道还有什么陷井,所以个人认为如果有java基础的,用官方推荐的ADT或AS开发是最适当的。
    回复 支持 反对

    使用道具 举报

    *滑块验证:

    本版积分规则

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

    GMT+8, 2025-6-16 10:08 , Processed in 0.068502 second(s), 13 queries , Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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