在Eclipse中导入编译MTK平台Android6.0源码的原生Gallery2应用

源码下载地址

       由于工作的需要,需要在Eclipse中调试MTK平台Android6.0的原生Gallery2应用, 网上已经有很多类似的技术文章了,步骤都差不多, 但是MTK在google原生的Gallery2基础上增加了一些定制功能,所以导入到eclipse过程中还是有些不一样的地方,这里有必要专门针对MTK这类平台做一个记录。


一、导入前的准备

1、 成功编译MTK Android6.0的源码,目的是为了得到后续导入gallery2到eclipse必须的引用jar文件。

2、 将MTK Android6.0工程的packages\apps下的Gallery2文件夹复制到到eclipse的workspace目录下

3、gallery2在编译时是需要系统的链接库,否则是编译不过的,同样在导入到eclipse时,也需要这些链接库。在workspace的gallery2工程下建立lib目录,从MTK Android6.0源码工程提取链接库文件放入到这个目录,至于哪些链接库文件需要提取,是有依据的,不可盲从,打开gallery2目录下的Android.mk文件,找到LOCAL_STATIC_JAVA_LIBRARIES的所包含的链接库语句

......

LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13
LOCAL_STATIC_JAVA_LIBRARIES += com.android.gallery3d.common2
LOCAL_STATIC_JAVA_LIBRARIES += com.mediatek.camera.ext
LOCAL_STATIC_JAVA_LIBRARIES += xmp_toolkit
LOCAL_STATIC_JAVA_LIBRARIES += mp4parser
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v8-renderscript

......

LOCAL_STATIC_JAVA_LIBRARIES += com.mediatek.ngin3d-static

......

LOCAL_STATIC_JAVA_LIBRARIES += com.mediatek.transcode

......

找到LOCAL_JAVA_LIBRARIES 的所包含的链接库语句:

......

LOCAL_JAVA_LIBRARIES += mediatek-framework
LOCAL_JAVA_LIBRARIES += telephony-common

......

LOCAL_JAVA_LIBRARIES += org.apache.http.legacy

......


这些是gallery2编译时需要的链接库。

这些链接库文件在android源码工程编译通过后,生成在anroid源码工程的out/target/common/obj/JAVA_LIBRARIES/目录下,链接库的目录命名是XXXXX_intermediates这样的形式,比如android-support-v13_intermediates,提取这些目录下的classes.jar或者javalib.jar均可。

在MTK源码工程目录下查找这些库文件,可以这样:

$  find . -type d -iname "org.apache.http.legacy*"

......

......

$ cd out/target/common/obj/JAVA_LIBRARIES/org.apache.http.legacy_intermediates

$cp javalib.jar ~/gallery2need/org.apache.http.legacy_intermediates.jar

我这里收集的是javalib.jar


另外注意com.mediatek.ngin3d-static相关的javalib.jar并不在out/目录下,

在vendor/mediatek/proprietary/frameworks/opt/magelib/legacy/ngin3d/com.mediatek.ngin3d-static/target目录下


Android.mk文件涉及的链接库有11个,实际上后面导入编译改错过程时发现不止这些,最后统计是有15个,如下:

                 

    

二、开始导入

1、打开eclipse,点击File | Import... | General | Existing Projects into Workspace, 选择gallery2文件夹。(如果gallery2文件夹首先没放在workspace目录,点击File | Import... | Android | Existing Android Code Into Workspace, 选择gallery2文件夹)

2、 Eclipse默认只编译src文件下的源文件,但是在src同级目录下还有gallerycommonsrc_pd, ext, mtkgallery目录,分析android.mk文件里对LOCAL_SRC_FILES常量的定义,发现这些目录在android源码编译中也是参与编译的,因此这些源码源码文件夹也要添加到eclipse工程。因为Eclipse下会把源码根目录当做包名起始地址,所以添加之前需要把gallerycommon,src_pd, ext, mtkgallery中的src文件夹下的com目录剪切到上一级目录中,删除空的src文件夹。eclipse刷新,并将这四个目录添加到eclipse编译中来,工程目录鼠标右键 | Build Path | Configure Build Path... | Source 

    

3、点击lib文件夹的jar包 -> 单击鼠标右键 -> Build Path -> Add to Build Path ,此时工程里会增加一个名称为Referenced Libraries库,然后鼠标右键 | Build Path | Configure Build Path... |  Order and Export,将Referenced Libraries这个库的位置放在Android6.0的前面。调整后的顺序如下:

        

4、将mtkgallery目录下的res目录复制合并到源码根目录下的res目录,并删除mtkgallery目录下的res目录。 复制之前,由于会有很多重名的资源文件,需要更名mtkgallery的res目录下的重名文件。对于Strings.xml批量改名:

$ find ./ -name "strings.xml" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.xml  ./{}_mtkgallery.xml


5、刷新工程并clean, 并改正编译错误。如果是缺少jar文件引起的错误,去android源码工程中寻找,最终需要添加15个jar文件。这里特别介绍一个错误是:缺少ScriptC_saturation, ScriptC_grey类之类的错误,这是由于这些java源文件是通过Gallery2\src\com\android\gallery3d\filtershow\filters\*.rs文件自动生成的,在eclipse工程下,编译时这些源文件自动生成在gen目录,而在android源码工程编译时,这些类的源文件自动生成在out/target/common/obj/APPS/Gallery2_intermediates/src/renderscript/src/com/android/gallery3d/filtershow/filters/目录下。复制android6.0源码工程中的这些java源文件到eclipse工程的Gallery2\src\com\android\gallery3d\filtershow\filters\目录下,并且删除所有Gallery2\src\com\android\gallery3d\filtershow\filters\*.rs文件,防止又在gen目录生成。

 另一个错误是: 缺少资源文件drm_protectioninfo_title的字符串定义,在Strings.xml末尾添加

    <string name="drm_protectioninfo_title">Protection Info</string>

OK, 没有错误了,导入完成:



源码下载地址


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值