导航:首页 > 源码编译 > prebuild增加编译文件

prebuild增加编译文件

发布时间:2025-02-24 15:26:06

android 升级webview版本,包括6.0系统

在做系统修改的过程中,android自带的webview版本不能满足OEM客户的要求,此种现象在android低版本中尤为更甚;因此我们需要自己对webview的版本进行升级。在Android 4.4版本以前,google采用的是webkit内核,也没有把webview作为一个apk独立出来,所以我们升级webview只能再Android 5.0以后;

目前通用的方法就是在浏览器中输入 liulanmi.com/labs/core.html 进行查看,我的理解,应该有其他方式,但一直未找到,还望指教。
下图是我升级过的版本:

https://www.apkmirror.com/uploads/?q=android-system-webview
该网址需要特殊访问,诸君自己努力吧!

目前我修改过6.0 和10系统,二者存在一定差异,但大同小异,猜测其他版本应该也差异不大

4.编译

4.编译

在调试6.0的时候,网上大部分博客修改的webview.apk都是修改 arm64 目录下的,导致我一直不能编译出正常的apk文件,最后我发现,在 prebuild 统计目录的 Android,mk 文件中有这个配置

最后一行指定了使用的webview.apk在哪个目录下,但是 my_src_arch 这个变量值未找到定义的地方;那就开启盲猜模式,既然arm64目录不行,那就只能是arm目录;实践证明,猜测正确。后来思考一下, 我们可以通过打印的方式,来看这个变量值到底是什么!

❷ android 怎么使用icu

如果只是测试修改后效果,执行步骤A即可;如果需要build后生效,则需要执行全部步骤
A. 在临时目录中编译ICU资源
1. 在external/icu4c下新建临时目录icubuild,进入icubuild目录
$mkdir external/icu4c/icuBuild
$cd external/icu4c/icuBuild
2. 执行icuConfigureRun linux命令,生成make文件
$.././runConfigureICU Linux
3. 执行make -j2命令,
$make -j2
对于GB版本,如果make -j2出错,需要用mtk提供的文件(Android 2.3 make-j2 ERROE.rar)替换(需要备份原文件)。
4. 将生成的external/icu4c/icuBuild/data/out/tmp/icudt44l.dat push到手机测试
$adb remount
$adb push external/icu4c/icuBuild/data/out/tmp/icudt44l.dat system/usr/icu/
$adb reboot
ICS对应的是icudt46l.dat,
JB以及以后版本是icudt48l.dat
B. COPY所需文件
1、将第一步生成的externalicu4cicubuilddataout mpicudt44l.dat复制到externalicu4cstubdata下并改名为icudt44l-all.dat,覆盖原来的同名文件。
2、对于GB版本,从ICS工程上拷贝路径prebuildlinux-x86icu-4.4文件夹,放到相应的路径下
ICS版本是icudt46l.dat和icudt46l-all.dat
JB及以上是icudt48l.dat和icudt48l-all.dat
C. 配置环境变量
重新配置环境变量(如果不配置正确会导致执行脚本出错)。以我的系统为例,配置过程如下:
1. 在终端中进入/proj/mtk71491/Desktop/GB/alps目录即:
$cd /proj/mtk71491/Desktop/GB/alps
2. 然后执行脚本(等价于./ build/envsetup.sh):
$source build/envsetup.sh
3. 配置环境变量(注意“=”前后不要有空格)。
$export ANDROID_EABI_TOOLCHAIN=/proj/mtk71491/Desktop/GB/alps/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/(JB2以及以上不执行此步骤)
$export LD_LIBRARY_PATH=/proj/mtk71491/Desktop/GB/alps/prebuilt/linux-x86/icu-4.4/(JB以及上以跳过这一步)
$export ANDROID_BUILD_TOP=/proj/mtk71491/Desktop/GB/alps/
执行完没有任何提示说明配置成功。
D. 执行脚本,重新生成.dat文件
执行脚本,如果遇到文档印尼语错误请用MTK提供的脚本(icu_dat_generator.rar)替换后再执行,如下所示:
1. 进入/proj/mtk71491/Desktop/GB/alps/external/icu4c/studdata目录
$cd external/icu4c/studdata
2. 执行脚本
$./icu_dat_generator.py 4.4 (ICS及以后版本执行$./icu_dat_generator.py)
如果该脚本执行成功,则会更新一遍stubdata下的icudt44l-**.dat这些文件,如果看到这些文件的修改时间变成了最新的时间,就说明已经重新生成真正最后起 作用的是icudt44l-large.dat这个文件。
ICS版是icudt46l-default.dat
JB以及以上是icudt48l-default.dat
E. 重新编译工程
一般修改后都是重新编译工程来测试效果,使用remake android命令即可.
F. 如果执行./icu_dat_generator.py报以下错误
Traceback (most recent call last):
File ./icu_dat_generator.py, line 296, in
main()
File ./icu_dat_generator.py, line 261, in main
icu_version = re.sub(r([^0-9]), , os.path.basename(input_files[0]))
IndexError: list index out of range
可能是环境变量没有配置好,请使用绝对路径,而不是相对路径。

❸ 自己可以编译安卓源码

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    ❹ 编译安卓5.0源码使用什么系统

    1、ubuntu需要安装openjdk 7

    2、 如果没有openjdk 7的话,需要下载jdk7,然后修改 build/core/main.mk 177行,将requires_openjdk := true 改成false

    3 、编译,如果出现chromium_org的问题,将 external/chromium_org/Android.mk 中 18行添加一个PRODUCT_PREBUILT_WEBVIEWCHROMIUM :=yes

    4 、然后初始化编译环境

    5 、make systemimage

    不淡定的朋友赶紧开工吧!

    ❺ android ndk 怎样调用第三方的so库文件

    问题描述:Android如何调用第三方SO库;
    已知条件:SO库为Android版本连接库(*.so文件),并提供了详细的接口说明;
    已了解解决方案:
    1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;
    2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;
    求解:
    1.上面两种方案是否可行?不可行的话存在什么问题?
    2.两种方案有什么区别?为什么网上大部都是用的第二种方案?
    3.只有一个*.so文件,并提供了详细的接口说明,是否可在ANDROID中使用它?

    首先要看这个SO是不是JNI规范的SO,比如有没有返回JNI不直接支持的类型。也就是说这个SO是不是可以直接当作JNI来调用。如果答案是否定的,你只能选第二个方案。

    如果答案是肯定的,还要看你是不是希望这个SO的库直接暴露给JAVA层,如果答案是否定的,你只能选第二个方案,比如你本身也是一个库的提供者。

    一般如果你只有SO,就说明这个是别人提供给你的,你可以要求对方给你提供配套的JAVA调用文件。

    1、这个要看这个SO是不是符合JNI调用的规范。还要看你自己的意愿。
    2、因为第二种方法最灵活,各种情况都可以实现。
    3、可以

    看能不能直接从JAVA调用的最简单的方法就是看SO里的函数名是不是Java_XXX_XXX_XXX格式的
    是就可以,你可以自己写一个配套的JAVA文件,注意一下SO函数名和JAVA函数名的转换规则,或者向SO提供方索要;
    不是的话就选第二种方案吧。

    1、检查所需文件是否齐全
    使用第三方动态库,应该至少有2个文件,一个是动态库(.so),另一个是包含
    动态库API声明的头文件(.h)
    2、封装原动态库
    原动态库文件不包含jni接口需要的信息,所以我们需要对其进行封装,所以我
    们的需求是:将libadd.so 里面的API封装成带jni接口的动态
    3、编写库的封装函数libaddjni.c
    根据前面生成的com_android_libjni_LibJavaHeader.h 文件,编写libaddjni.c,用
    来生成libaddjni.so

    Android中集成第三方软件包(.jar, .so)

    Android中可能会用到第三方的软件包,这包括Java包.jar和Native包.so。jar包既可通过Eclipse开发环境集成,也可通过编译源码集成,看你的工作环境。

    假定自己开发的程序为MyMaps,需要用到BaiMaps的库,包括mapapi.jar和libBMapApiEngine_v1_3_1.so。

    一、Eclipse中集成第三方jar包及.so动态库

    MyMaps工程下创建目录libs以及libs/armeabi,把mapapi.jar放在的libs/目录下,把libBMapApiEngine_v1_3_1.so放在libs/armeabi/下。

    Eclipse中把第三方jar包mapapi.jar打包到MyMaps的步骤:

    1. 右击工程,选择Properties;
    2. Java Build Path,选择Libraries;
    3. Libraries页面点击右面按钮“Add Library…”;
    4. 选择“User Library”,点击“Next”;
    5. 点击“User Libraries”按钮;
    6. 在弹出界面中,点击“New…”;
    7. 输入“User library name”,点击“OK”确认;
    8. 返回之后,选择刚刚创建的User library,右面点击“AddJARs”;
    9. 选择MyMaps/libs/下的mapapi.jar;
    10. 确认,返回。

    这样,编译之后,该jar包就会被打进MyMaps.apk中,libBMapApiEngine_v1_3_1.so也被打包在lib/armeabi/中。
    程序运行过程中,libBMapApiEngine_v1_3_1.so被放在/data/data/<yourAppPackage>/lib/下,加载动态库时系统会从程序的该lib/目录下查找.so库。

    二、源码中集成第三方集成jar包及.so动态库

    Android源码中MyMaps放在packages/apps下。MyMaps下创建目录libs以及libs/armeabi,并把mapapi.jar放在libs/,把libBMapApiEngine_v1_3_1.so放在libs/armeabi。

    2.1 修改Android.mk文件

    Android.mk文件如下:

    [plain] view plain
    LOCAL_PATH:= $(call my-dir)
    include $(CLEAR_VARS)

    LOCAL_MODULE_TAGS := optional

    LOCAL_STATIC_JAVA_LIBRARIES := libmapapi

    LOCAL_SRC_FILES := $(call all-subdir-java-files)

    LOCAL_PACKAGE_NAME := MyMaps

    include $(BUILD_PACKAGE)

    ##################################################
    include $(CLEAR_VARS)

    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=libmapapi:libs/mapapi.jar
    LOCAL_PREBUILT_LIBS :=libBMapApiEngine_v1_3_1:libs/armeabi/libBMapApiEngine_v1_3_1.so
    LOCAL_MODULE_TAGS := optional
    include $(BUILD_MULTI_PREBUILT)

    # Use the following include to make our testapk.
    include $(callall-makefiles-under,$(LOCAL_PATH))

    1 集成jar包
    LOCAL_STATIC_JAVA_LIBRARIES取jar库的别名,可以任意取值;
    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar库的规则,格式:别名:jar文件路径。注意:别名一定要与LOCAL_STATIC_JAVA_LIBRARIES里所取的别名一致,且不含.jar;jar文件路径一定要是真实的存放第三方jar包的路径。
    编译用BUILD_MULTI_PREBUILT。
    2 集成.so动态库
    LOCAL_PREBUILT_LIBS指定prebuilt so的规则,格式:别名:so文件路径。注意:别名一般不可改变,特别是第三方jar包使用.so库的情况,且不含.so;so文件路径一定要是真实的存放第三方so文件的路径。
    编译拷贝用BUILD_MULTI_PREBUILT。

    2.2 加入到GRANDFATHERED_USER_MODULES

    在文件user_tags.mk中,把libBMapApiEngine_v1_3_1加入到GRANDFATHERED_USER_MODULES中

    [plain] view plain
    GRANDFATHERED_USER_MODULES += \
    … \
    libBMapApiEngine_v1_3_1

    user_tags.mk可以是build/core下的,也可以是$(TARGET_DEVICE_DIR)下的,推荐修改$(TARGET_DEVICE_DIR)下的。

    2.3 编译结果

    MyMaps.apk编译生成在out/target/proct/<YourProct>/system/app/下;
    libBMapApiEngine_v1_3_1.so放在out/target/proct/<YourProct>/system/lib/下,这也是系统加载动态库时搜索的路径。

    ❻ 新人求教,编译一个最简单的Android程序,提示下面的错误咋解决

    1、32位系统下的编译

    如果需要在32位系统中编译android系统,在编译前需要对部分makefile进行修改

    首先修改build/core/main.mk,修改的内容如下所示:

    -ifneq (64,$(findstring 64,$(build_arch)))

    +ifneq
    (i686,$(findstring i686,$(build_arch)))

    $(warning
    ************************************************************) $(warning You are attempting to build on a 32-bit system.)

    $(warning Only 64-bit build environments are supported beyond froyo/2.2.)

    其次修改如下四个文件:

    external/clearsilver/cgi/Android.mk
    external/clearsilver/java-jni/Android.mk
    external/clearsilver/util/Android.mk
    external/clearsilver/cs/Android.mk # This forces a 64-bit build for Java6
    -LOCAL_CFLAGS += -m64
    -LOCAL_LDFLAGS += -m64
    +LOCAL_CFLAGS += -m32
    +LOCAL_LDFLAGS += -m32即将LOCAL_CFLAGS和LOCAL_LDFLAGS由-m64改为-m32,从而指定使用32位系统进行编译如果使用 64bit 的操作系统编译,这些就都不用修改,但记得需要安装:For 64-bit servers the following extra packages may be needed:
    "sudo apt-get install libc6-dev-i386" (libc6-dev-amd64 if AMD CPU)
    "sudo apt-get install g++-multilib lib32ncurses5-dev lib32z1-dev"
    还有 jdk64bit 的版本编译2 、build/core/base_rules.mk:128:*** frameworks/opt/emoji/jni:
    .... libgl2jni already defined by framwworks/base/opengl/tests/gl2_jni/jni 停止

    从编译规则上看:
    # Make sure that this IS_HOST/CLASS/MODULE combination is unique.
    mole_id := MODULE.$(if \
    $(LOCAL_IS_HOST_MODULE),HOST,TARGET).$(LOCAL_MODULE_CLASS).$(LOCAL_MODULE)
    ifdef $(mole_id)
    $(error $(LOCAL_PATH): $(mole_id) already defined by $($(mole_id)))
    endif

    在framwworks/base/opengl/tests/gl2_jni/下面定义的android.mk定义了:
    LOCAL_MODULE := libgl2jni
    include $(BUILD_SHARED_LIBRARY)
    导致生成的动态库重复,这是不对的,修改tests这个目录不参与编译即可,最直接的办法删除掉framwworks/base/opengl/tests/gl2_jni这个文件夹

    3、AIDL 编译报couldn't find import for class原因
    “AIDL服务只支持有限的数据类型,因此,如果用AIDL服 务传递一些复杂的数据就需要做更一步处理。AIDL服务支持的数据类型如下:
    Java的简单类 型(int、char、boolean等)。不需要导入(import)。String和 CharSequence。不需要导入(import)。
    List和 Map。但要注意,List和Map对象的元素类型必须是AIDL服务支持的数据类型。不需要导入(import)。AIDL自动生成 的接口。需要导入(import)。
    实现 android.os.Parcelable接口的类。需要导入(import)。
    其中后两种数据类 型需要使用import进行导入,传递不需要 import的数据类型的值的方式相同。传递一个需要import的数据类型的值(例如,实现android.os.Parcelable 接口的类)的步 骤略显复杂。除了要建立一个实现android.os.Parcelable接口的类外,还需要为这个类单独建立一个aidl文件,并使用parcelable关键字进行定义。”
    没有加LOCAL_AIDL_INCLUDES += xxx ,所以找不到我的parcelable aidl文件。

    修改android源码根目录下的build/core/pathmap.mk把你的目录加进去,此时再make update-api

    4、老是提示 @Override错误 方法未覆盖其父类的方法
    使 用JDK1.6编译没有问题,使用JDK1.5编译,会报@Override方法未覆盖其父类的方法。实际上这个方法是类实现的接口中方法,
    但是,这个语 法的jdk1.6的下面是可以通过的,也就是说jdk1.6认为类覆盖父类方法与实现接口方法都叫override,而jdk1.5不
    是这样认为的,不知 道这是当初jdk1.5的bug,还是当初就是认为覆盖父类方法与实现接口方法是不一样的,不得而知。但是从
    OO角度来看,覆盖父类方法与实现接口方法都 可以认为override,因为他们目的都是一样的,都是为了重用,都是多态的一种
    表现方式。

    更改jdk版本为1.6即可

    5、编译alsa-lib库错误

    android系统开发移植alsa-lib库的过程中编译的时候出现了如下的错误
    /tmp/cckyaR40.s: Assembler messages:
    /tmp/cckyaR40.s:2763: Error: selected processor does not support `mrs ip,cpsr'
    /tmp/cckyaR40.s:2764: Error: unshifted register required -- `orr r2,ip,#128'
    /tmp/cckyaR40.s:2765: Error: selected processor does not support `msr cpsr_c,r2
    字面的意思报的是汇编错误,选择的处理器不支持mrs和msr指令。
    原来的ARM指令有32位和16位两种指令模式,16位为thumb指令集,thumb指令集编译出的代码占用空间小,
    而且效率也高,所以android的arm编译器默认用的是thumb模式编译,问题在于alsa的代码中有部分的内容
    用到了32位的指令,所以才会报如下的错误,修改的方法也很简单,在Android.mk中加入如下内容即可:
    LOCAL_ARM_MODE := arm
    android的编译系统中LOCAL_ARM_MODE变量的取值为arm或者thumb,代表32位和16位两种arm指令集,默认为thumb
    prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld: failed to set dynamic section sizes: Bad value

    collect2: ld returned 1 exit status
    make: *** [out/target/proct/merlin/obj/SHARED_LIBRARIES/libasound_intermediates/LINKED/libasound.so] 错误 1
    解决此问题将alsa-lib/include/config.h文件中的如下宏定义去掉即可:
    #define VERSIONED_SYMBOLS

    开发过程中碰到过很多错误,后续再一一总结记录下来,有些忘记了。。

    在android.mk中编译:

    include $(CLEAR_VARS)
    $(call add-prebuilt-files, STATIC_LIBRARIES, libyfcdca.a)

    出现提示需要定义:LOCAL_MODULE_TAGS := optional 一般修改方法是:

    build\core\definitions.mk 中的宏定义变量:

    define include-prebuilt
    include $$(CLEAR_VARS)
    LOCAL_SRC_FILES := $(1)
    LOCAL_BUILT_MODULE_STEM := $(1)
    LOCAL_MODULE_SUFFIX := $$(suffix $(1))
    LOCAL_MODULE := $$(basename $(1))
    LOCAL_MODULE_CLASS := $(2)
    include $$(BUILD_PREBUILT)
    endef

    在这里增加一个LOCAL_MODULE_TAGS := optional

    但是这需要修改android源码,如果不是自已的android系统,这么做就麻烦了,所以必须想其它办法解决:

    #include $(CLEAR_VARS)
    #$(call add-prebuilt-files, STATIC_LIBRARIES, libyfcdca.a)

    include $(CLEAR_VARS)
    LOCAL_SRC_FILES := libyfcdca.a
    LOCAL_BUILT_MODULE_STEM := libyfcdca.a
    LOCAL_MODULE_SUFFIX := lib
    LOCAL_MODULE := yfcdca
    LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    LOCAL_MODULE_TAGS := optional
    include $(BUILD_PREBUILT)

    如此即可了。供你参考
    1、32位系统下的编译

    如果需要在32位系统中编译android系统,在编译前需要对部分makefile进行修改

    首先修改build/core/main.mk,修改的内容如下所示:

    -ifneq (64,$(findstring 64,$(build_arch)))

    +ifneq
    (i686,$(findstring i686,$(build_arch)))

    $(warning
    ************************************************************) $(warning You are attempting to build on a 32-bit system.)

    $(warning Only 64-bit build environments are supported beyond froyo/2.2.)

    其次修改如下四个文件:

    external/clearsilver/cgi/Android.mk
    external/clearsilver/java-jni/Android.mk
    external/clearsilver/util/Android.mk
    external/clearsilver/cs/Android.mk # This forces a 64-bit build for Java6
    -LOCAL_CFLAGS += -m64
    -LOCAL_LDFLAGS += -m64
    +LOCAL_CFLAGS += -m32
    +LOCAL_LDFLAGS += -m32即将LOCAL_CFLAGS和LOCAL_LDFLAGS由-m64改为-m32,从而指定使用32位系统进行编译如果使用 64bit 的操作系统编译,这些就都不用修改,但记得需要安装:For 64-bit servers the following extra packages may be needed:
    "sudo apt-get install libc6-dev-i386" (libc6-dev-amd64 if AMD CPU)
    "sudo apt-get install g++-multilib lib32ncurses5-dev lib32z1-dev"
    还有 jdk64bit 的版本编译2 、build/core/base_rules.mk:128:*** frameworks/opt/emoji/jni:
    .... libgl2jni already defined by framwworks/base/opengl/tests/gl2_jni/jni 停止

    从编译规则上看:
    # Make sure that this IS_HOST/CLASS/MODULE combination is unique.
    mole_id := MODULE.$(if \
    $(LOCAL_IS_HOST_MODULE),HOST,TARGET).$(LOCAL_MODULE_CLASS).$(LOCAL_MODULE)
    ifdef $(mole_id)
    $(error $(LOCAL_PATH): $(mole_id) already defined by $($(mole_id)))
    endif

    在framwworks/base/opengl/tests/gl2_jni/下面定义的android.mk定义了:
    LOCAL_MODULE := libgl2jni
    include $(BUILD_SHARED_LIBRARY)
    导致生成的动态库重复,这是不对的,修改tests这个目录不参与编译即可,最直接的办法删除掉framwworks/base/opengl/tests/gl2_jni这个文件夹

    3、AIDL 编译报couldn't find import for class原因
    “AIDL服务只支持有限的数据类型,因此,如果用AIDL服 务传递一些复杂的数据就需要做更一步处理。AIDL服务支持的数据类型如下:
    Java的简单类 型(int、char、boolean等)。不需要导入(import)。String和 CharSequence。不需要导入(import)。
    List和 Map。但要注意,List和Map对象的元素类型必须是AIDL服务支持的数据类型。不需要导入(import)。AIDL自动生成 的接口。需要导入(import)。
    实现 android.os.Parcelable接口的类。需要导入(import)。
    其中后两种数据类 型需要使用import进行导入,传递不需要 import的数据类型的值的方式相同。传递一个需要import的数据类型的值(例如,实现android.os.Parcelable 接口的类)的步 骤略显复杂。除了要建立一个实现android.os.Parcelable接口的类外,还需要为这个类单独建立一个aidl文件,并使用parcelable关键字进行定义。”
    没有加LOCAL_AIDL_INCLUDES += xxx ,所以找不到我的parcelable aidl文件。

    修改android源码根目录下的build/core/pathmap.mk把你的目录加进去,此时再make update-api

    4、老是提示 @Override错误 方法未覆盖其父类的方法
    使 用JDK1.6编译没有问题,使用JDK1.5编译,会报@Override方法未覆盖其父类的方法。实际上这个方法是类实现的接口中方法,
    但是,这个语 法的jdk1.6的下面是可以通过的,也就是说jdk1.6认为类覆盖父类方法与实现接口方法都叫override,而jdk1.5不
    是这样认为的,不知 道这是当初jdk1.5的bug,还是当初就是认为覆盖父类方法与实现接口方法是不一样的,不得而知。但是从
    OO角度来看,覆盖父类方法与实现接口方法都 可以认为override,因为他们目的都是一样的,都是为了重用,都是多态的一种
    表现方式。

    更改jdk版本为1.6即可

    5、编译alsa-lib库错误

    android系统开发移植alsa-lib库的过程中编译的时候出现了如下的错误
    /tmp/cckyaR40.s: Assembler messages:
    /tmp/cckyaR40.s:2763: Error: selected processor does not support `mrs ip,cpsr'
    /tmp/cckyaR40.s:2764: Error: unshifted register required -- `orr r2,ip,#128'
    /tmp/cckyaR40.s:2765: Error: selected processor does not support `msr cpsr_c,r2
    字面的意思报的是汇编错误,选择的处理器不支持mrs和msr指令。
    原来的ARM指令有32位和16位两种指令模式,16位为thumb指令集,thumb指令集编译出的代码占用空间小,
    而且效率也高,所以android的arm编译器默认用的是thumb模式编译,问题在于alsa的代码中有部分的内容
    用到了32位的指令,所以才会报如下的错误,修改的方法也很简单,在Android.mk中加入如下内容即可:
    LOCAL_ARM_MODE := arm
    android的编译系统中LOCAL_ARM_MODE变量的取值为arm或者thumb,代表32位和16位两种arm指令集,默认为thumb
    prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld: failed to set dynamic section sizes: Bad value

    collect2: ld returned 1 exit status
    make: *** [out/target/proct/merlin/obj/SHARED_LIBRARIES/libasound_intermediates/LINKED/libasound.so] 错误 1
    解决此问题将alsa-lib/include/config.h文件中的如下宏定义去掉即可:
    #define VERSIONED_SYMBOLS

    开发过程中碰到过很多错误,后续再一一总结记录下来,有些忘记了。。

    在android.mk中编译:

    include $(CLEAR_VARS)
    $(call add-prebuilt-files, STATIC_LIBRARIES, libyfcdca.a)

    出现提示需要定义:LOCAL_MODULE_TAGS := optional 一般修改方法是:

    build\core\definitions.mk 中的宏定义变量:

    define include-prebuilt
    include $$(CLEAR_VARS)
    LOCAL_SRC_FILES := $(1)
    LOCAL_BUILT_MODULE_STEM := $(1)
    LOCAL_MODULE_SUFFIX := $$(suffix $(1))
    LOCAL_MODULE := $$(basename $(1))
    LOCAL_MODULE_CLASS := $(2)
    include $$(BUILD_PREBUILT)
    endef

    在这里增加一个LOCAL_MODULE_TAGS := optional

    但是这需要修改android源码,如果不是自已的android系统,这么做就麻烦了,所以必须想其它办法解决:

    #include $(CLEAR_VARS)
    #$(call add-prebuilt-files, STATIC_LIBRARIES, libyfcdca.a)

    include $(CLEAR_VARS)
    LOCAL_SRC_FILES := libyfcdca.a
    LOCAL_BUILT_MODULE_STEM := libyfcdca.a
    LOCAL_MODULE_SUFFIX := lib
    LOCAL_MODULE := yfcdca
    LOCAL_MODULE_CLASS := STATIC_LIBRARIES
    LOCAL_MODULE_TAGS := optional
    include $(BUILD_PREBUILT)

    如此即可了。

    阅读全文

    与prebuild增加编译文件相关的资料

    热点内容
    怎么区分物理服务器 浏览:740
    安卓开发板能干什么 浏览:361
    程序员学五笔 浏览:316
    linux编程下载文件 浏览:6
    java基础面试编程题 浏览:464
    linux数学计算 浏览:775
    android手机电脑同步 浏览:289
    简明python教程书在线观看 浏览:744
    理想论坛多空出击指标源码 浏览:685
    扩散更新算法 浏览:557
    当代大学德语pdf 浏览:506
    打程序员代码被暴打 浏览:390
    怎么看手机支持mrp和app 浏览:466
    python爬取百度贴吧信息 浏览:635
    手机怎么连好轻app 浏览:399
    真实赛车3安卓如何登录 浏览:733
    解压压缩包要谁的密码 浏览:746
    微信看涨跌源码 浏览:70
    android全局service 浏览:291
    飞猪app关注怎么取消 浏览:437