常見make編譯錯誤。
環境:Android 8.0 API 26
1.build/core/package_internal.mk:51: error: external/zlib: Package modules may not define LOCAL_MODULE. 20:30:34 ckati failed with: exit status 1 make: *** [run_soong_ui] Error 1
解釋:包模塊可能沒有定義LOCAL_MODULE
解決: 檢查mk編譯文檔之中關鍵字是否有寫錯。 主要是includ 後面的內容是否有寫錯。
是否有寫錯關鍵字錯誤,就會造成解析mk文件錯誤。然後出現上面的錯誤警告。
2.ninja: error: unknown target 'MODULES-IN-device-hisilicon-bigfish-packages-apps-XXXX'20:31:42 ninja failed with: exit status 1make: *** [run_soong_ui] Error 1
如果只是通過mm命令編譯該apk ,而不是系統編譯時
解釋:加載apk 模塊失敗。
這種錯誤有很多原因會造成。但是最可能出現的問題在於mk文件之中的 LOCAL_PATH 第一行第一列的代碼之中有輸入錯誤。
正確輸入效果: LOCAL_PATH := $(call my-dir)
3.error: Error: No resource found that matches the given name: attr 'colorPrimary'.
錯誤效果圖
主要原因在於編譯的庫文件造成的。
這是因爲你的項目之中是有了Android V7 庫文件,而在mk文件的配置之中沒有導入相關的庫,所以在編譯檢查的時候,出現了找不到resource的錯誤。
android.mk 文件之中添加android-support-v7appcompat
使用 導入庫之後 還需要注意導入v7的 res文件,否則任然提示錯誤。
4.unknown element <**user-sdk**> found.
warn: ignoring density 'hdpi-v4' for -c option. warn: ignoring density 'xhdpi-v4' for -c option. xxxx/packages/apps/XXXAPK/AndroidManifest.xml:4: error: unknown element <user-sdk> found. ninja: build stopped: subcommand failed. 19:24:34 ninja failed with: exit status 1
這種情況其實都是在告訴你,你的AndroidManifest之中的標籤有寫錯了。
例如我這個例子就是在AndroidManifest.xml文檔第4行內容之中,將
<uses-sdk> 給寫成了 <user-sdk> 造成的錯誤。
如果提示element 錯誤,都是因爲你寫的標籤語法不正確的問題。注意檢查。
5.ERROR: /home/code/device/Demo/packages/apps/HUDemo/java/com/xxxx/txx/util/MainActivity.java:9.8: The import androidx cannot be resolved
錯誤原因,主要在於你的源碼之中import 導入了androidx 庫的資源。
解決方案有兩種:
1.將你的代碼之中全部的import的androidx 替換爲android-v7庫,因爲通常情況下,我們在利用sdk進行編譯的時候android SDK提供了androidX庫,但是在系統源碼之中,很可能沒有androidX庫。(android 8.0源碼之中沒有找到androidx庫。而存在android-v7庫
)
2.參考第三的問題的解決。導入AndroidX庫。
3.將AndroidX的jar文件,導入到源碼之中,然後使用第三方庫導入方式進行配置。
推薦使用第一種解決,方便也快捷。
因爲我們如果是使用源碼進行編譯apk,你就不要再考慮適配多少的問題了。這邊版本就是跟着當前的系統專門做適配的。