1

ソースが Eclipse で正常にコンパイルされることはわかっていますが、同じソースを何度も使用して簡単に作成できるようにするために、ほとんどの作業を処理するために .bat をセットアップすることにしました。まあ、短くて甘いですが、私の外部jarはコンパイル時ではなく実行時では利用できませんが、強制終了(Android ClassNotFoundDefError)を受け取ります。問題は、コマンドが .bat ファイルにどのように設定されているかにあると確信しており、Web サイトを読んだ後 (最後に使用した参照のセットをリストします)、このコードにたどり着きました....

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 に移動する前に、ファイル階層とその他すべてを設定する別のプログラムから供給されます。この問題について私が本当に説明できるのはこれだけです。

参照:
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 のスタック オーバーフローに関するすべての質問。さらにいくつかあります。現時点では、私が行っているように更新されることはありません。

4

1 に答える 1

0

一部の人々とは異なります。私は助けたいと思っていましたが、過去にスタックオーバーフローに潜んでいる回答を受け取りました.スタックオーバーフローでこの質問を何度も見たので、回答を調査した後に戻ってきました。これに対する正しい答え:

「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標準」に準拠するには、ITにスペースを入れずに静的アドレスを指定する必要があります(上記の質問の参照を参照してください)。これは、コンパイルされたコードとしてこれらの 2 つの jar を含めるように Android 構築スタッフに指示します。


彼らへの最初の呼びかけ

@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 に圧縮するときにすべての .class ファイルとともにそれらの .jar を含めるように指示されます。しかし、これが将来誰かに役立つことを願っています。

于 2013-03-18T15:33:36.653 に答える