下面記錄一下過程。
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了。