您的位置:首页 > 移动开发

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

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

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



下面记录一下过程。

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,修改其中的两个路径。保存配置。



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了。

aaa
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: