繁体   English   中英

在运行时找不到类,但是在编译时使用命令行

[英]Class Not Found at RunTime, but there at compile time, using command line

我知道我的源代码可以很好地在日食中编译,但是为了方便使用同一源代码反复制作,我选择设置一个.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的所有问题都在堆栈上溢出; 还有更多; 我现在无法找到将更新的内容。

因为与某些人不同; 我确实想提供帮助,并且在过去曾经收到过有关堆栈溢出的答案,在研究了答案之后我又回来了,因为我在堆栈溢出中多次看到此问题,而没有人给出正确的答案:

“您必须在dx.bat内显式调用您的外部jar”

call %ANDROID_DX% --output="%CD%\%2\bin\classes.dex" "%CD%\%2\bin" "C:\<dir>\mobileSDK.jar" "C:\<dir>\MobileSDK2.jar" || goto EXIT

为了符合“ java标准”,您必须提供一个静态地址,且没有空格,以确保其符合Java标准(请参阅我上面提到的问题)。 这告诉Android建筑物将这两个jar作为编译代码包括在内。


他们的第一个电话

@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"

希望他们在compileTime期间表现出色,并为编译器提供可用的类,以避免由于缺少更好的术语而引发错误。
将它们包含在dx.bat中还告诉它在将其压缩为APK时,将那些.jar和所有.class文件包括在内。 但我希望这对将来的人有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM