android源码下编译相关汇总
来源:互联网 发布:js utf16 编辑:程序博客网 时间:2024/05/16 08:00
主要总结下源码下编译遇到的一些问题。
1.LOCAL_JAVA_LIBRARIES引用的文件在system/framework目录下面
问题: 在system/etc/permissions会有一些xml文件,其中有些文件名和system/framework下的某些jar包的包名相同。2.编译jar成静态库
LOCAL_STATIC_JAVA_LIBRARIES := libdom4jLOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libdom4j:libs/dom4j-1.6.1.jar
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := user #声明引用库的名字LOCAL_STATIC_JAVA_LIBRARIES := libdom4j LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := CoolReader include $(BUILD_PACKAGE) #编译库include $(CLEAR_VARS) #注意格式和jar包路径,libdom4j可以随便,但是不要冲突。LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libdom4j:libs/dom4j-1.6.1.jar include $(BUILD_MULTI_PREBUILT)
3.jni的编译
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := user engLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := packagenameLOCAL_JNI_SHARED_LIBRARIES := libCipherinclude $(BUILD_PACKAGE)# Use the following include to make .so。include $(call all-makefiles-under,$(LOCAL_PATH))
得到的是.so动态库,另外注意如下几点:
1.通过上述编译的apk通过adb install 安装能得到.so库,但是push到system/app下,则没有libCipher.so,重启也没有
需要手动push lib库到system/lib或者将代码全编一起烧录。
2.上面的mk文件调用了子目录jni下的mk文件来编译jni(最后一句话),将jni当成单独的项目来编译,示例mk文件如下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := libCipherLOCAL_SRC_FILES := com_android_mic_udp_Cipher.c# for loggingLOCAL_LDLIBS += -lloginclude $(BUILD_SHARED_LIBRARY)3.经过查看查找java加载库路径,System.getProperty("java.library.path")得到的路径是system/lib 和 vendor/lib ,另外也会在data/data/应用/lib/下查找
并且BUILD_SHARED_LIBRARY生成的so库在system/lib下,可以通过编译log看到。或者将需要的so放在system/lib下,直接使用LOCAL_JNI_SHARED_LIBRARIES或者
LOCAL_SHARED_LIBRARIES 引用so库
LOCAL_JNI_SHARED_LIBRARIES将so编译到apk里面去(lib/armeabi-v7a/libxxx.so)
4.如果系统库目录和第三方库目录下面有相同名称的so库,第三方程序会首先调用系统库。
4. 编译aidl文件
在mk文件的LOCAL_SRC_FILES里面加上aidl文件
如果aidl是继承parcelable,则不是加aidl文件,而是加上aidl对应的java文件
5.如何控制make编译hdpi,mdpi和默认的高度和宽度
1、修改frameworks\base\core\java\android\content\res \CompatibilityInfo.java:public static final int DEFAULT_PORTRAIT_WIDTH = 240;
public static final int DEFAULT_PORTRAIT_HEIGHT = 320;
2、在 build\target\product\generic.mk加入
CUSTOM_LOCALES:= hdpi mdpi
这样编译出的源码即使用hdpi
6.google源码下编译没有生成hdpi资源
解决方法和上面类似,在build\target\product\generic.mk最后加上CUSTOM_LOCALES += hdpi mdpi
7.使用LOCAL_DEX_PREOPT = false 使得编译不生成odex文件
8.混淆代码开关
build/core/proguard.flags中有下面一句,意指将默认不混淆,不需要代码删除,我们将这一句注释起来,就起到代码混淆编译的作用。
# Don't obfuscate. We only need dead code striping.
-dontobfuscate
将-dontobfuscate注释,然后在工程的mk文件里添加LOCAL_PROGUARD_FLAG_FILES := proguard.flags
另外注意下,eclipse下编译如果用到了隐藏api,则无法导出混淆apk。使用framework编译出来的class文件导入到工程可以成功引用隐藏api并成功编译。
9.高通平台下,devices/qcom/common/common.mk里定义了很多工程信息,比如语言,locale,system.img包含的apk等。
还有system/core/rootdir/init.rc文件。
- android源码下编译相关汇总
- Android源码编译相关问题汇总
- Android源码编译相关问题汇总
- Linux下编译Android源码问题汇总
- Linux下编译Android源码问题汇总
- Android 源码编译相关
- Android 源码编译相关
- android源码编译相关
- Android源码编译问题汇总
- Android 源码编译出错汇总
- 编译android 源码相关文章
- Android 源码编译相关命令
- Linux 下源码编译相关知识
- Ubuntu下编译Android源码
- 10.04下编译Android源码:
- 10.04下编译Android源码
- Linux下编译Android源码
- Android 源码下编译APK
- HDU 2052 - Picture
- MySQL索引背后的数据结构及算法原理
- excel技巧总结(不断添加中........)
- 导入数据IMP-00058 ORA-00904
- eclipse插件的发布
- android源码下编译相关汇总
- cocos2dx 不用直接在 onEnter 里面 addTargetedDelegate (或 addStandardDelegate)
- web.xml中load-on-startup的作用
- JavaScript的实例化与继承:请停止使用new关键字(转自infoQ)
- 编写Makefile
- 关于C#异步调用的知识点
- vsftp安装配置 [2013-11-29更新]
- Deep Learning 的Matlab工具箱
- 无锁编程(CAS以及java的实现)