用lazarus瞬間開發自己的安卓APP

老狼8848發表於2015-02-12
    根據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


相關文章