Android KK 找不到


一直通過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的相關引用。

         所選擇的宏,可以從 build\core\combo\include\arch\ 里的 AndroidConfig.h里區分出來,這個頭文件是android強制代碼中所有的C和C++文件都會包含的一個頭文件,里面是控制編譯的一些宏。不同的編譯目標會引用不同的AndroidConfig.h文件,比如編譯host的庫時,會引用build\core\combo\include\arch\linux-x86下的AndroidConfig.h,當然前提你的編譯環境是linux-x86的,目前基本都是。。。。編譯target的庫時,如項目目標device是arm平台,那就是build\core\combo\include\arch\linux-arm下的AndroidConfig.h文件。

而在這個頭文件中控制property方法編譯的是  HAVE_LIBC_SYSTEM_PROPERTIES 和 HAVE_SYSTEM_PROPERTY_SERVER 這兩個宏永遠是互斥的。

如下:build\core\combo\include\arch\linux-arm\AndroidConfig.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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM