私は gradle で android プロジェクトを構築しようとしています: これは ndk フレーバーのライブラリ プロジェクトであり.jar
、Unity の礼儀である外部でスパイスが効いています。
gradle ファイルの詳細が重要だとはあまり思いませんが、次のような外部 jar ファイル (Unity が提供) を含めていると言えば十分です。
dependencies {
compile files('libs/unity.jar')
}
Javaのコンパイル中にgradleが次のようなコマンドを発行するため、実際には機能しているようです。
BASE="<Some directory>"
javac -d "${BASE}/PluginsSources/Android/libproject/build/intermediates/classes/fat/debug" \
-g -encoding UTF-8 \
-bootclasspath /Users/myusername/Applications/adt/sdk/platforms/android-23/android.jar \
-sourcepath "${BASE}/PluginsSources/Android/libproject/build/tmp/compileFatDebugJavaWithJavac/emptySourcePathRef" \
-classpath "${BASE}/PluginsSources/Android/libproject/libs/unity.jar" \
"${BASE}/PluginsSources/Android/libproject/src/main/java/org/example/ScriptBridge/JavaClass.java" \
"${BASE}/PluginsSources/Android/libproject/build/generated/source/r/fat/debug/org/example/ScriptBridge/R.java" \
"${BASE}/PluginsSources/Android/libproject/build/generated/source/buildConfig/fat/debug/org/example/ScriptBridge/BuildConfig.java" \
-XDuseUnsharedTable=true
BASE
本当にあなたが追加したインデントと変数。unity.jar
はクラスパス エントリであることに注意してください。
問題は、jar が -bootclasspath オプション(!!)に入れられない限り、unity.jar
コンパイル時にjavac が明らかにクラスを見つけられないため、コンパイルが失敗することです。
なぜこれが起こるのですか?私の知る限り、クラスの検索パスは階層的である必要があり、ブートクラスパスの後、javac はクラスパスを検索する必要があります...
gradle に jar を bootclasspath somhow に貼り付けるように指示することは可能ですか (これは不器用に問題を解決します)?
よりクリーンな/より良い方法はありますか?
洞察をありがとう!