1.JDK9出現(xiàn)的問(wèn)題
去年JDK9發(fā)布了, 最近我把JDK8更新為JDK9后, 當(dāng)我使用 Android apksigner dx 命令工具出現(xiàn)如下問(wèn)題
D:\Dev\AndroidSDK\build-tools\27.0.3>apksigner
-Djava.ext.dirs=D:\Dev\AndroidSDK\build-tools\27.0.3\lib is not supported. Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
D:\Dev\AndroidSDK\build-tools\27.0.3>dx
-Djava.ext.dirs=D:\Dev\AndroidSDK\build-tools\27.0.3\lib is not supported. Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
-Djava.ext.dirs 和 -classpath 都是指定需要加載的jar/class文件目錄路徑,
按錯(cuò)誤提示猜測(cè)應(yīng)該是JDK9不再支持-Djava.ext.dirs參數(shù),之前的JDK8可以正常支持。
于是按錯(cuò)誤提示嘗試把 -Djava.ext.dirs 替換為 -classpath
在 D:\Dev\AndroidSDK\build-tools\27.0.3\apksigner.bat 批處理文件中修改如下:
REM call "%java_exe%" %javaOpts% -Djava.ext.dirs="%frameworkdir%" -jar "%jarpath%" %params%
call "%java_exe%" %javaOpts% -classpath="%frameworkdir%" -jar "%jarpath%" %params%
結(jié)果我還是太天真了,JDK9花式給了一個(gè)同樣的錯(cuò)誤
D:\Dev\AndroidSDK\build-tools\27.0.3>apksigner
Unrecognized option: -classpath=D:\Dev\AndroidSDK\build-tools\27.0.3\lib
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
2.解決方法
Unrecognized option: -classpath
既然JDK9裝做不認(rèn)識(shí)-classpath, 那我只好嘗試看看java命令有什么新option
D:\>java
用法: java [options] <主類> [args...]
(執(zhí)行類)
或 java [options] -jar <jar 文件> [args...]
(執(zhí)行 jar 文件)
或 java [options] -m <模塊>[/<主類>] [args...]
java [options] --module <模塊>[/<主類>] [args...]
(執(zhí)行模塊中的主類)
其中, 選項(xiàng)包括:
-d32 已過(guò)時(shí), 在以后的發(fā)行版中將被刪除
-d64 已過(guò)時(shí), 在以后的發(fā)行版中將被刪除
-cp <目錄和 zip/jar 文件的類搜索路徑>
-classpath <目錄和 zip/jar 文件的類搜索路徑>
--class-path <目錄和 zip/jar 文件的類搜索路徑>
使用 ; 分隔的, 用于搜索類文件的目錄, JAR 檔案
和 ZIP 檔案列表。
果然JDK9新增命令選項(xiàng) --class-path, 也是用來(lái)指定class/jar文件目錄路徑
在 D:\Dev\AndroidSDK\build-tools\27.0.3\apksigner.bat 批處理文件中修改如下:
REM call "%java_exe%" %javaOpts% -Djava.ext.dirs="%frameworkdir%" -jar "%jarpath%" %params%
call "%java_exe%" %javaOpts% --class-path="%frameworkdir%" -jar "%jarpath%" %params%
終于成功了
D:\Dev\AndroidSDK\build-tools\27.0.3>apksigner
USAGE: apksigner <command> [options]
apksigner --version
apksigner --help
EXAMPLE:
apksigner sign --ks release.jks app.apk
apksigner verify --verbose app.apk
apksigner is a tool for signing Android APK files and for checking whether
signatures of APK files will verify on Android devices.
剛開始出現(xiàn)問(wèn)題時(shí),因?yàn)槲窇诌@種系統(tǒng)問(wèn)題而粗暴滾回JDK8,還好后來(lái)強(qiáng)迫癥犯了,誤打誤撞終于找到原因...
"提出問(wèn)題比解決問(wèn)題更重要",我對(duì)這句話越來(lái)越有感觸了...
出現(xiàn)了問(wèn)題,應(yīng)該感到慶幸而不是畏懼,因?yàn)檫@個(gè)新問(wèn)題會(huì)帶來(lái)新知識(shí),因畏懼而逃避的人將永遠(yuǎn)無(wú)知!
簡(jiǎn)書: http://m.itdecent.cn/p/77db2ea8098f
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/79307325
GitHub博客: http://lioil.win/2018/02/10/Java-JDK9-class-path.html
Coding博客: http://c.lioil.win/2018/02/10/Java-JDK9-class-path.html