【发布时间】:2013-03-04 22:23:40
【问题描述】:
我知道我的源代码在 Eclipse 中编译得很好,但是为了更容易地反复使用相同的源代码进行生产,我选择设置一个 .bat 来为我处理大部分工作。好吧,简短而甜蜜,我的外部 jar 在编译时不可用,但在运行时不可用,我收到强制关闭(Android ClassNotFoundDefError)。我确定问题出在我的命令是如何在我的 .bat 文件中设置的,并且在阅读了网站之后(我将列出我最后使用的一组参考资料)我来到了这段代码......
echo on
@REM %1 NOTUSED
@REM %2 SHORT NAME (DIR HIERARCHY POINTER)
@REM %3 SRCPATH (RECEIVES PACKAGE PATH)
@SET PREV_PATH=%CD%
@cd /d %0\..
@rmdir %2\bin /S /Q
@rmdir %2\gen /S /Q
@mkdir %2\bin || goto EXIT
@mkdir %2\gen || goto EXIT
@SET APP_NAME=%2
@SET ANDROID_REV=android-7
@SET ANDROID_AAPT_ADD="%ANDROID-SDK%\platform-tools\aapt.exe" add
@SET ANDROID_AAPT_PACK="%ANDROID-SDK%\platform-tools\aapt.exe" package -v -f -I "%ANDROID-SDK%\platforms\%ANDROID_REV%\android.jar" -j ".\usrsrc\libs\MobileSDK.jar" -j ".\usrsrc\libs\MobileSDK2.jar"
@SET ANDROID_DX="%ANDROID-SDK%\platform-tools\dx.bat" --dex
@SET JAVAC="%JAVABIN%\javac.exe" -classpath ".\%2;%ANDROID-SDK%\platforms\%ANDROID_REV%\android.jar;%2\libs\MobileSDK.jar;%2\libs\MobileSDK2.jar"
@SET JAVAC_BUILD=%JAVAC% -sourcepath "%2\src;%2\gen" -d "%2\bin" -jar "%2\libs\MobileSDK.jar;%2\libs\MobileSDK2.jar"
call %ANDROID_AAPT_PACK% -M "%2\AndroidManifest.xml" -A "%2\assets" -S "%2\res" -m -J "%2\gen" -F "%2\bin\resources.ap_" -j "%2\libs\MobileSDK.jar" -j "%2\libs\MobileSDK2.jar" || goto EXIT
call %JAVAC_BUILD% %2%3*.java || goto EXIT
call %ANDROID_DX% --output="%CD%\%2\bin\classes.dex" %CD%\%2\bin || goto EXIT
copy "%CD%\%2\bin\resources.ap_" "%CD%\%2\bin\%APP_NAME%.ap_" || goto EXIT
call %ANDROID_AAPT_ADD% "%CD%\%2\bin\%APP_NAME%.ap_" "%CD%\%2\bin\classes.dex" || goto EXIT
call "%JAVABIN%\jarsigner" -keystore "%CD%\keystore.keystore" -storepass "XXXXXXXXXX" - keypass "XXXXXXXX" -signedjar "%CD%\%2\%APP_NAME%.apk" "%CD%\%2\bin\%APP_NAME%.ap_" "XXXXXXXXX" || goto EXIT
del "%2\bin\%APP_NAME%.ap_"
:EXIT
cd "%PREV_PATH%"
ENDLOCAL
pause
exit /b %ERRORLEVEL%
现在我知道,每当有人向我展示答案是多么显而易见时,我都会感到非常愚蠢。但是我已经在这件事上坚持了大约 24 小时了,我再也受不了了。我将不胜感激。
仅供参考:输入此 bat 的大多数变量都来自另一个程序,该程序设置文件层次结构和其他所有内容,甚至在我们进入 .bat 之前。关于这个问题,我只能描述这些。
参考:
http://www.herongyang.com/Android/Project-aapt-Android-Asset-Packaging-Tool.html
http://www.apriorit.com/our-company/dev-blog/233-how-to-build-apk-file-from-command-line
以及关于外部 jar 堆栈溢出的所有问题;
还有一些;我暂时找不到会像我一样更新。
【问题讨论】:
-
我只能说......多么可怕的构建方式。了解 Apache Ant。
-
我同意。你应该问问自己为什么这样做,然后解决这个问题。放弃这个糟糕的批处理工作,帮您保持理智。这就是 Oracle 写的东西:)
-
是的,谢谢,你们俩都为我提供了常识,谢谢。我已经深入研究了 Ant 和其他东西。出于个人原因,我想尝试通过命令行进行操作;但是,是的,我很喜欢被人质问。
标签: java android command-line classpath noclassdeffounderror