# Build Project Error:Malformed \uxxxx encoding ![image](https://hackmd.io/_uploads/BJ_W4uqwC.png) # Cocos - Build - make 產生 Build Log ![CleanShot 2024-07-09 at 13.10.37](https://hackmd.io/_uploads/Sy2LIr9wA.png) # 查看 Cocos Build Log ``` 2024-7-9 12:02:34 - debug: // ---- build task native:make ---- 2024-7-9 12:02:34 - log: [runCmd]: ./gradlew your-project-name:assembleRelease 2024-7-9 12:02:36 - log: [runCmd ./gradlew - error] Exception in thread "main" 2024-7-9 12:02:36 - log: [runCmd ./gradlew - error] java.lang.IllegalArgumentException: Malformed \uxxxx encoding. at java.base/java.util.Properties.loadConvert(Properties.java:663) at java.base/java.util.Properties.load0(Properties.java:457) at java.base/java.util.Properties.load(Properties.java:409) 2024-7-9 12:02:36 - log: [runCmd ./gradlew - error] at org.gradle.wrapper.SystemPropertiesHandler.getSystemProperties(SystemPropertiesHandler.java:41) at org.gradle.wrapper.GradleWrapperMain.addSystemProperties(GradleWrapperMain.java:64) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:45) 2024-7-9 12:02:36 - log: [task:make]: Run build plugin native : make failed!, 23.333333333333332% 2024-7-9 12:02:36 - log: [task:make]: failed to exec ./gradlew your-project-name:assembleRelease, 36.66666666666667% 2024-7-9 12:02:36 - warn: failed to exec ./gradlew your-project-name:assembleRelease 2024-7-9 12:02:36 - debug: // ---- builder:run-build-stage-make ---- (1528ms) 2024-7-9 12:02:36 - debug: [Build Memory track]: builder:build-stage-total make start:216.25MB, end 216.61MB, increase: 362.53KB 2024-7-9 12:02:36 - error: make package /Users/user/Documents/GitHub/your-project-name/build/android failed! 2024-7-9 12:02:36 - log: [task:make]: failed! ``` # 解決方式 從日誌中可以看出,在進行 Gradle 構建時遇到了錯誤,具體是由於 Java 的 `Properties.loadConvert` 方法在處理一個格式錯誤的 `\uxxxx` 編碼時出現了問題。這可能是因為某個配置文件中存在無效的 Unicode 編碼。下面是可能的解決方案步驟: 1. **檢查 `gradle.properties` 文件**:這個文件可能包含有問題的 Unicode 編碼。打開並檢查 `gradle.properties` 文件,尋找並修正任何格式錯誤的 `\u` 編碼。 2. **檢查其他配置文件**:除了 `gradle.properties` 文件,還有可能是其他配置文件(如 `local.properties`、`build.gradle` 等)包含格式錯誤的 Unicode 編碼。檢查這些文件中是否存在類似的編碼問題。 3. **Gradle Wrapper 文件**:有時候,問題也可能出現在 Gradle Wrapper 的配置文件中。檢查並確保所有 Gradle Wrapper 相關的文件(如 `gradlew.properties`)都是正確配置的。 4. **清理和重建**:在檢查並修正配置文件後,執行以下命令來清理並重建項目: ```sh ./gradlew clean ./gradlew assembleRelease ``` 5. **詳細日誌**:如果仍然無法解決問題,可以嘗試啟用更詳細的日誌來排查問題: ```sh ./gradlew assembleRelease --stacktrace --debug ``` 根據日誌的提示,具體的問題來自於文件 `/Users/user/Documents/GitHub/your-project-name/build/android` 的構建過程中。這意味著這個目錄下的某個配置文件可能存在問題,重點檢查這個目錄下的配置文件。 # 我的 Gradle Properties ``` # Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx10248m -XX:MaxPermSize=256m # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true org.gradle.jvmargs=-Xmx4608m -Dfile.encoding=UTF-8 android.useAndroidX=true android.injected.testOnly=false android.native.buildOutput=verbose # Android SDK version that will be used as the compile project PROP_COMPILE_SDK_VERSION=34 # Android SDK version that will be used as the earliest version of android this application can run on PROP_MIN_SDK_VERSION=21 # Android SDK version that will be used as the latest version of android this application has been tested on PROP_TARGET_SDK_VERSION=34 # Android Build Tools version that will be used as the compile project PROP_BUILD_TOOLS_VERSION=30.0.3 # Android Application Name PROP_APP_NAME=your-project-name # Instant App PROP_ENABLE_INSTANT_APP=false # InputSDK PROP_ENABLE_INPUTSDK=false PROP_NDK_PATH=/Users/user/Library/Android/sdk/ndk/23.2.8568313 # Build variant PROP_IS_DEBUG=false # Cocos Engine Path COCOS_ENGINE_PATH=/Applications/Cocos/Creator/3.8.2/CocosCreator.app/Contents/Resources/resources/3d/engine/native # Res path RES_PATH=/Users/user/Documents/GitHub/your-project-name/build/android # Native source dir NATIVE_DIR=/Users/user/Documents/GitHub/your-project-name/native/engine/android # Application ID APPLICATION_ID=com.newdigit.memeadventure # List of CPU Archtexture to build that application with # Available architextures (armeabi-v7a | arm64-v8a | x86 | x86_64) # To build for multiple architexture, use the `:` between them # Example - PROP_APP_ABI=arm64-v8a PROP_APP_ABI=arm64-v8a # fill in sign information for release mode RELEASE_STORE_FILE=C:\Users\user\Documents\your-project-name\native\engine\android\keystore\keystore.jks RELEASE_STORE_PASSWORD=12345678! RELEASE_KEY_ALIAS=key0 RELEASE_KEY_PASSWORD=12345678! ``` # 系統環境下被解釋為錯誤的 Unicode 編碼 在你的 `gradle.properties` 文件中並沒有明顯的錯誤 Unicode 編碼問題,但有可能是某些字符在某些環境下被解釋為錯誤的 Unicode 編碼。以下是一些可能的問題和解決方案: 1. **Windows 文件路徑格式**:文件中有一行使用了 Windows 路徑格式,這可能會導致問題: ```properties RELEASE_STORE_FILE=C:\Users\user\Documents\your-project-name\native\engine\android\keystore\keystore.jks ``` 建議將其改為 Unix 標準格式(使用 `/` 而不是 `\`): ```properties RELEASE_STORE_FILE=C:/Users/user/Documents/your-project-name/native/engine/android/keystore/keystore.jks ``` 2. **檢查文件編碼**:確保 `gradle.properties` 文件的編碼是 UTF-8。可以使用文本編輯器來確認和更改文件的編碼。 3. **環境變量**:確保你的環境變量中沒有包含不正確的 `\u` 編碼。可以檢查你的環境變量設置。 4. **其他配置文件**:除了 `gradle.properties` 文件外,檢查其他與 Gradle 相關的配置文件,如 `local.properties` 和 `build.gradle`,確保它們沒有類似的問題。 5. **清理 Gradle 緩存**:有時候 Gradle 緩存可能會導致問題。可以嘗試清理 Gradle 緩存並重新構建: ```sh ./gradlew clean ./gradlew --stop ./gradlew assembleRelease ``` 如果修改了 Windows 文件路徑格式和檢查編碼問題後,問題仍然存在,可以進一步檢查是否有其他配置文件中存在類似的問題或是與環境變量相關的問題。 # 解決方式 **Windows 文件路徑格式**:文件中有一行使用了 Windows 路徑格式,這導致問題: ```properties RELEASE_STORE_FILE=C:\Users\user\Documents\your-project-name\native\engine\android\keystore\keystore.jks ``` 將其改為 Unix 標準格式(使用 `/` 而不是 `\`): ```properties RELEASE_STORE_FILE=C:/Users/user/Documents/your-project-name/native/engine/android/keystore/keystore.jks ``` # buildConfig_android.json 更改 keystorePath ``` "keystorePath": "C:\\Users\\user\\Documents\\your-project-name\\native\\engine\\android\\keystore\\keystore.jks", ``` 改成 ``` "keystorePath": "C:\\Users\\user\\Documents\\your-project-name\\native\\engine\\android\\keystore\\keystore.jks", ```