Android4.4/CM11编译常见错误及解决方法!

Android4.4/CM11编译常见错误及解决方法!

前言:关于Android4.4/CM11编译中遇到的一些错误,本人进行了整理。有需要的童鞋可以做个参考,如果有什么建议也欢迎指出!

问题1:

编译时遇到:make: *** 没有规则可以创建“/home/xxx/cm11/out/target/common/obj/JAVA_LIBRARIES/webviewchromium_intermediates/classes-full-debug.jar”需要的目标“/home/xxx/cm11/out/target/common/obj/JAVA_LIBRARIES/android_webview_java_intermediates/javalib.jar”。 停止。
make: *** 正在等待未完成的任务.... ...

解决方法:

删除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。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
注: 某些输入文件使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
1 个错误
make: *** [/home/jere0035/work/out/target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates/classes-full-debug.jar] 错误 41
make: *** 正在等待未完成的任务....

解决方法:

修改140行(不一定在140行,根据错误报告找到函数)
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源码要添加分辨率等设置到device下的BoradConfig.mk


因为编译TWRP多了很多需要手动设置硬件方面的配置参数,没有默认设置的,所以我们需要写入这些
# 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分区所以我们还要写入
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_USES_MMCUTILS := true
BOARD_HAS_LARGE_FILESYSTEM := true
我们设置没有select按钮
BOARD_HAS_NO_SELECT_BUTTON := true
分辨率 480*800
DEVICE_RESOLUTION := 480×800
没有misc分区

BOARD_HAS_NO_MISC_PARTITION := true

问题4:
自编译内核需要在BoardcConfig.mk添加内核目录以及config
例如:# Kernel
TARGET_KERNEL_SOURCE := kernel/zte/msm7x27a(解释:这一句是定义到你放内核的目录下)
TARGET_KERNEL_CONFIG := cyanogen_atlas40_defconfig(解释:这一句是定义到你放内核的目录下Config的名称)

问题5:
遇到编译twrp刷入画面跳屏幕的情况
解决方法:
修改recovery/minui/graphics.c,注释掉
if (double_buffering)
gr_active_fb = (gr_active_fb + 1) & 1;
这一段代码,重新编译便可以了

问题6:
有时候遇到recovery不读内存卡的话
解决方法:
这个原因多数是recovery.fstab的问题,cm11对recovery.fstab进行重新写法定义,有时候需要修改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导致。也可以手动找到合适的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,把编译标志 Werror去掉就可以。方便起见,我是直接把所有的makefile中的Werror全部去掉了,当然要做好备份。
在Android.mk中添加标志禁用指定的Werror类型也可以:
LOCAL_CFLAGS += -Wno-error=format-security

问题9:
编译遇到webviewclassic错误,无法创建,错误41
解决方法:
找到frameworks/base/core/java/android/webkit下的WebViewClassic.java注视掉1366和1372的head和Allow using Classic WebView一段!

问题10:
遇到无法创建out/target/product/xxx/boot.img需要的目标out/target/product/xxx/kernel
解决方法:
查看内核存放的位置与boardconfig.mk定义的位置是否相同

问题11:
遇到如下错误
Traceback (most recent call last):
  File "../../base/android/jni_generator/jni_generator.py", line 1065, in
    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的版本,其他版本修改相应位置)
1)JDK1.6安装
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html
uname -a 查看ubuntu版本,选择和ubuntu 32位/64位对应的jdk版本(i586/x64)。
2) JDK环境变量配置
#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编译器生成的字节码。
git
sudo apt-get install git git-core
或者假如你的jdk是装在usr/jvm中的,那么
cd /usr/bin/
/usr/bin$ sudo ln -s -f javap

总结:以上就是个人编译Android4.4/CM11遇到的一些问题了,如果有什么建议或者不懂的可以关注我的微博进行交流与讨论!还有最后送上可靠的软件推广渠道!

我的微博:@言舞殇篙
软件推广渠道: 安卓软件推广渠道

                                                                                                                                                                                                                                                                                 

你可能感兴趣的:(ROM)