Android4.4/CM11编译常见错误及解决方法!
Android4.4/CM11編譯常見錯誤及解決方法!
前言:關(guān)于Android4.4/CM11編譯中遇到的一些錯誤,本人進(jìn)行了整理。有需要的童鞋可以做個參考,如果有什么建議也歡迎指出!
問題1:
編譯時遇到:make: *** 沒有規(guī)則可以創(chuàng)建“/home/xxx/cm11/out/target/common/obj/JAVA_LIBRARIES/webviewchromium_intermediates/classes-full-debug.jar”需要的目標(biāo)“/home/xxx/cm11/out/target/common/obj/JAVA_LIBRARIES/android_webview_java_intermediates/javalib.jar”。 停止。
make: *** 正在等待未完成的任務(wù).... ...
解決方法:
刪除device配置文件下BoardConfig.mk中的PRODUCT_PREBUILT_WEBVIEWCHROMIUM := yes這段代碼!
問題2:
華為的機子編譯可能遇到:frameworks/opt/telephony/../../../device/huawei/c8815/ril/HuaweiQualcommRIL.java:140: 錯誤: 找不到符號
? ? ? ? ? ? case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret = ?responseInts(p); break;
? ? ? ? ? ? ? ? ?^
? 符號: ? 變量 RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION
? 位置: 類 HuaweiQualcommRIL.java
target Dex: CMFileManager
注: 某些輸入文件使用或覆蓋了已過時的 API。
注: 有關(guān)詳細(xì)信息, 請使用 -Xlint:deprecation 重新編譯。
注: 某些輸入文件使用了未經(jīng)檢查或不安全的操作。
注: 有關(guān)詳細(xì)信息, 請使用 -Xlint:unchecked 重新編譯。
1 個錯誤
make: *** [/home/jere0035/work/out/target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates/classes-full-debug.jar] 錯誤 41
make: *** 正在等待未完成的任務(wù)....
解決方法:
修改140行(不一定在140行,根據(jù)錯誤報告找到函數(shù))
140(原來的) ? case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: ret = ?responseInts(p); break;
140(修改后) ? case RIL_REQUEST_ENTER_DEPERSONALIZATION_CODE: ret = ?responseInts(p); break;
其實就是把這一句代碼NETWORK_DEPERSONALIZATION改為DEPERSONALIZATION_CODE
問題3:
遇到recovery源碼問題,我是嘗試修改recovery源碼,我是把cm11自帶的源碼改為twrp的源碼,但是twrp源碼要添加分辨率等設(shè)置到device下的BoradConfig.mk
因為編譯TWRP多了很多需要手動設(shè)置硬件方面的配置參數(shù),沒有默認(rèn)設(shè)置的,所以我們需要寫入這些
# Platform
TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi
TARGET_ARCH_VARIANT := armv7-a-neon
ARCH_ARM_HAVE_TLS_REGISTER := true
ARCH_ARM_HAVE_NEON :=true
ARCH_ARM_HAVE_VFP := true
由于C8815使用的是EXT4分區(qū)所以我們還要寫入
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_USES_MMCUTILS := true
BOARD_HAS_LARGE_FILESYSTEM := true
我們設(shè)置沒有select按鈕
BOARD_HAS_NO_SELECT_BUTTON := true
分辨率 480*800
DEVICE_RESOLUTION := 480×800
沒有misc分區(qū)
BOARD_HAS_NO_MISC_PARTITION := true
問題4:
自編譯內(nèi)核需要在BoardcConfig.mk添加內(nèi)核目錄以及config
例如:# Kernel
TARGET_KERNEL_SOURCE := kernel/zte/msm7x27a(解釋:這一句是定義到你放內(nèi)核的目錄下)
TARGET_KERNEL_CONFIG := cyanogen_atlas40_defconfig(解釋:這一句是定義到你放內(nèi)核的目錄下Config的名稱)
問題5:
遇到編譯twrp刷入畫面跳屏幕的情況
解決方法:
修改recovery/minui/graphics.c,注釋掉
if (double_buffering)
gr_active_fb = (gr_active_fb + 1) & 1;
這一段代碼,重新編譯便可以了
問題6:
有時候遇到recovery不讀內(nèi)存卡的話
解決方法:
這個原因多數(shù)是recovery.fstab的問題,cm11對recovery.fstab進(jìn)行重新寫法定義,有時候需要修改recovery.fstab的寫法或者修改源碼bulid部分(可以參考cm10.1或者以前的版本)
問題7:
編譯rom刷入后遇到“set_metadata_xxx fails”
解決方法:
在源碼/bootable/recovery/updater/install.c找到parsed.has_capabilities = true修改為parsed.has_capabilities = false,編譯出來的ROM就可以在舊版recovery刷入,其實就是update-binary導(dǎo)致。也可以手動找到合適的update-binary直接替換到rom中!
問題8:
Android編譯源碼時禁用werror避免報錯
解決方法1:
修改源碼目錄下的 build/core/config.mk
如下:
- TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point
+ #TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point
+ TARGET_ERROR_FLAGS :=
解決方法2:
如果是單個模塊中的錯誤就找到報錯模塊下的Android.mk,把編譯標(biāo)志 Werror去掉就可以。方便起見,我是直接把所有的makefile中的Werror全部去掉了,當(dāng)然要做好備份。
在Android.mk中添加標(biāo)志禁用指定的Werror類型也可以:
LOCAL_CFLAGS += -Wno-error=format-security
問題9:
編譯遇到webviewclassic錯誤,無法創(chuàng)建,錯誤41
解決方法:
找到frameworks/base/core/java/android/webkit下的WebViewClassic.java注視掉1366和1372的head和Allow using Classic WebView一段!
問題10:
遇到無法創(chuàng)建out/target/product/xxx/boot.img需要的目標(biāo)out/target/product/xxx/kernel
解決方法:
查看內(nèi)核存放的位置與boardconfig.mk定義的位置是否相同
問題11:
遇到如下錯誤
Traceback (most recent call last):
? File "../../base/android/jni_generator/jni_generator.py", line 1065, in <module>
? ? sys.exit(main(sys.argv))
? File "../../base/android/jni_generator/jni_generator.py", line 1061, in main
? ? options.optimize_generation)
? File "../../base/android/jni_generator/jni_generator.py", line 996, in GenerateJNIHeader
? ? jni_from_javap = JNIFromJavaP.CreateFromClass(input_file, namespace)
? File "../../base/android/jni_generator/jni_generator.py", line 507, in CreateFromClass
? ? stderr=subprocess.PIPE)
? File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
? ? errread, errwrite)
? File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
? ? raise child_exception
OSError: [Errno 2] No such file or directory
解決方法就是:(假如你是jdk1.6.0_45的版本,其他版本修改相應(yīng)位置)
1)JDK1.6安裝
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html
uname -a 查看ubuntu版本,選擇和ubuntu 32位/64位對應(yīng)的jdk版本(i586/x64)。
2) JDK環(huán)境變量配置
#set java environment?
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45?
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
3)裝jdk的時候,少裝了javap工具。
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_45/bin/javac 1
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_45/bin/java 1
update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_45/bin/javaws 1
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_45/bin/jar 1
update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.6.0_45/bin/javah 1
update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.6.0_45/bin/javap 1
update-alternatives --config javac
update-alternatives --config java
update-alternatives --config javaws
update-alternatives --config jar
update-alternatives --config javah
update-alternatives --config javap
javap是jdk自帶工具,可反編譯,也可查看java編譯器生成的字節(jié)碼。
git
sudo apt-get install git git-core
或者假如你的jdk是裝在usr/jvm中的,那么
cd /usr/bin/
/usr/bin$ sudo ln -s -f javap
總結(jié):以上就是個人編譯Android4.4/CM11遇到的一些問題了,如果有什么建議或者不懂的可以關(guān)注我的微博進(jìn)行交流與討論!還有最后送上可靠的軟件推廣渠道!
我的微博:@言舞殤篙
軟件推廣渠道:?安卓軟件推廣渠道
總結(jié)
以上是生活随笔為你收集整理的Android4.4/CM11编译常见错误及解决方法!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 努力工作宣言
- 下一篇: 苹果怎么刷机清除手机密码