用lazarus瞬间开发自己的安卓APP

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

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


用lazarus瞬间开发自己的安卓APP


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


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

压缩包中的jdk-6u39-windows-i586.exe用不到了。

最核心的东西是laz4android1.3-46592-FPC2.7.1.exe,安装一下。

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

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

    3、运行laz4android 后,打开例子,修改配置 Project -> Project Options  -> Path->Libraries,修改其中的两个路径。保存配置。
用lazarus瞬间开发自己的安卓APP


  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 中生成了以下内容:

用lazarus瞬间开发自己的安卓APP


然后安装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了。



aaa