jenkins android sdk,Jenkins为什么找不到Android SDK?
有趣的是錯誤消息行
C:\Program Files x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(567,2):
包含空格 `` 字符,而不是 x86 左側的左括號 ( .
系統 PATH 環境變量不應具有第一個目錄路徑
C:\ProgramData\Oracle\Java\javapath
這應該是目錄列表中的第五個目錄路徑 .
我的一臺Windows計算機上沒有安裝Android SDK,但我發現 ANDROID_SDK_HOME 和 ANDROID_SDK_HOME 的目錄路徑是用包含的周圍雙引號定義的 .
這可能是正確的,但也可能導致問題,具體取決于批處理文件如何引用這兩個環境變量或在應用程序中使用這些變量 .
目錄路徑通常沒有包含雙引號的環境變量 .
在批處理文件中,第一個和第二個參數的處理可能是個問題 .
SET projectPath=%1
SET projectName=%2
msbuild %projectPath%\%projectName% /p:Configuration=%config% /t:Clean
如果項目路徑或項目名稱包含空格字符或其中一個字符 &()[]{}^=;!'+,~` ,則必須在啟動批處理文件時將它們括在雙引號中 . 通常的做法是將目錄路徑,文件名和其他參數傳遞給用雙引號括起來的批處理文件 .
第一個和第二個參數分配給在啟動批處理文件時在命令行上定義的環境變量 projectPath 和 projectName ,這意味著沒有或帶有雙引號 . 如果項目路徑和項目名稱用雙引號括起來,則第三行在執行前展開,例如:
msbuild "C:\Project Path"\"Project Name" /p:Configuration=xxx /t:Clean
這是不好的 . 它取決于Windows命令解釋器的錯誤糾正程度和Windows的內核功能 . 但是,確保在將批處理文件參數分配給環境變量時刪除雙引號并將參數字符串括在需要它的雙引號中或者至少強烈建議在下面的命令行中引用它們時,肯定會更好 .
在Jenkins使用的批處理文件中,盡可能避免環境變量 PATH 和 PATHEXT 的依賴性也是有意義的,特別是在通過指定要使用完整路徑執行的應用程序并且不使用文件擴展名來運行Jenkins作為具有系統帳戶的服務時環境變量或使用Windows自身定義的系統環境變量 .
這里是編寫的批處理代碼,沒有安裝Jenkins,MSBuild,Java SDK,Java JDK或Android SDK,假設 config 參數是一個永遠不包含任何關鍵字符的短字 .
set "projectPath=%~1"
set "projectName=%~2"
set "keystorePath=%~3"
set "password=%~4"
set "alias=%~5"
set "config=%~6"
set "apkName=%~7"
rem Get directory paths of used applications for build task.
for /D %%I in ("%ProgramFiles(x86)%\MSBuild\*") do set "MSBUILD_PATH=%%I\Bin"
for /D %%I in ("%ProgramFiles%\Java\jdk*") do set "JAVA_JDK_PATH=%%I\bin"
"%MSBUILD_PATH%\msbuild.exe" "%projectPath%\%projectName%" /p:Configuration=%config% /t:Clean
"%MSBUILD_PATH%\msbuild.exe" "%projectPath%\%projectName%" /p:Configuration=%config% /t:PackageForAndroid /p:AndroidSdkDirectory="%ProgramFiles%\Android\android-sdk"
"%JAVA_JDK_PATH%\jarsigner.exe" -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore "%keystorePath%" -storepass "%password%" -signedjar "%projectPath%\bin\%config%\com.company.helloworld-signed.apk" "%projectPath%\bin\%config%\com.company.helloworld.apk" "%alias%"
"%JAVA_JDK_PATH%\zipalign.exe" -f -v 4 "%projectPath%\bin\%config%\com.company.helloworld-signed.apk" "%projectPath%\bin\%config%\%apkName%.apk"
我不知道使用批處理文件查找MSBuild和Java JDK路徑或使用系統環境變量是否真的是個好主意 . 如果安裝了多個版本的MSBuild和/或Java JDK,則自動搜索MSBuild和Java JDK路徑可能不是一個好主意 .
但是,強烈建議將批處理文件參數分配給環境變量,并刪除用 %~1 , %~2 ,...后面的雙引號,然后將變量參數字符串括在雙引號中 .
通過在命令提示符窗口中運行幫助輸出 call /? 解釋了哪些修飾符可用于引用參數 .
使用與此問題相關的www搜索引擎找到的頁面:
這些網頁是我用搜索搜索的前7個結果中的4個首選的萬維網搜索引擎,術語 "Android SDK Directory could not be found" 用雙引號括起來,在此處發布,以查找包含該術語的頁面 .
還有一個提示:
用戶通過Windows控制面板定義或編輯的系統環境變量僅對應用程序和服務啟動 after 進行修改 .
已經運行的所有服務,進程和應用程序都已經擁有了自己的一組環境變量,這些變量是由Windows在啟動服務/進程/應用程序時從父進程派生的已經運行的服務/進程/應用程序的內存中自動創建的 .
父進程不可能操縱任何正在運行的子進程的環境變量,子進程也不可能操縱其父進程的環境變量 .
每個進程都有自己的環境變量列表,由Windows自動創建,作為啟動新進程的進程的環境變量列表的副本 .
因此,對于在后臺運行的Windows服務,系統環境變量的修改至少需要停止并重新啟動服務,甚至可能需要重新啟動Windows,具體取決于正在運行的Windows服務的父進程 .
總結
以上是生活随笔為你收集整理的jenkins android sdk,Jenkins为什么找不到Android SDK?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个讲信用的个性签名
- 下一篇: 求一个关于中秋节的个性签名!