簡體   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