zoukankan      html  css  js  c++  java
  • Android KK 找不到<cutils/properties.h>

    一直通过property来控制android系统的号码匹配位数,之前的项目都工作的好好的,但到了KK时,在sqlite库中引用property的相关方法,却一直编译error...

    折腾了好久,发现从KK开始google在编译 libcutils到host static library时,不再将properties.c编译进库里,而相应的target static library里是会编进去的,所以问题就来了。sqlite的mk文件里是会将sqlite编进host static库的,而libcutils在host static中又不包含property的相关方法,所以就导致编译出错。。。。另一方面,sqlite也会编进target 的static library,但target的Libcutils里是包含了property的编译的,所以不会有问题,问题就出来这个Host的编译上。

    解决办法一:修改libcutils的mk文件,将properties.c编进host static library,这样host static里的sqlite也可以引用了;

             这个方法尝试了,但关联实在是多,并非单单加一个properties.c到编译里这么简单,这里也要吐槽下google,怎么会改这个地方。

    解决方法二:使用宏控制,针对host static的sqlite编译,不加property的相关引用。

             所选择的宏,可以从 buildcorecomboincludearch 里的 AndroidConfig.h里区分出来,这个头文件是android强制代码中所有的C和C++文件都会包含的一个头文件,里面是控制编译的一些宏。不同的编译目标会引用不同的AndroidConfig.h文件,比如编译host的库时,会引用buildcorecomboincludearchlinux-x86下的AndroidConfig.h,当然前提你的编译环境是linux-x86的,目前基本都是。。。。编译target的库时,如项目目标device是arm平台,那就是buildcorecomboincludearchlinux-arm下的AndroidConfig.h文件。

    而在这个头文件中控制property方法编译的是  HAVE_LIBC_SYSTEM_PROPERTIES 和 HAVE_SYSTEM_PROPERTY_SERVER 这两个宏永远是互斥的。

    如下:buildcorecomboincludearchlinux-armAndroidConfig.h

    /*
     * Define if libc includes Android system properties implementation.
     */
    #define HAVE_LIBC_SYSTEM_PROPERTIES 1
    
    /*
     * Define if system provides a system property server (should be
     * mutually exclusive with HAVE_LIBC_SYSTEM_PROPERTIES).
     */
    /* #define HAVE_SYSTEM_PROPERTY_SERVER */

    所以我们使用这个宏来控制编译就可以避免host static sqlite 库编译error。

    如下:

    #ifdef HAVE_LIBC_SYSTEM_PROPERTIES
    #include <cutils/properties.h>
    #endif
  • 相关阅读:
    PHP的反射机制
    mysqlbinlog
    PHP调用java的class
    ecshop session机制
    memory_limit session.cache_expire ecshop初始化注释说明
    ecshop运行超过30秒超时的限制解决办法
    如果你想拥有事业,而非仅仅是工作
    扎克伯格谈”人际交往”趋势
    Magento架构分析,Magento MVC 设计分析
    推荐的PHP编码规范
  • 原文地址:https://www.cnblogs.com/flyme/p/3659235.html
Copyright © 2011-2022 走看看