记录下Gradle化Android Gallery3D应用的过程
来源:互联网 发布:js九九乘法表怎么写 编辑:程序博客网 时间:2024/06/05 01:11
意义
Android系统里面有很多优秀的应用。Gallery3D就是十分优秀的一个。里面包含了renderscript图像处理,OpenGL特效渲染等一系列的功能。很多同学以为它是在Android源码里面,所以一直敬而远之。但实际上它几乎没有使用什么私有的API,完全可以独立出来用SDK编译成app放到其他版本的手机上面运行。我在一年前研究滤镜的时候做过一个版本的Gallery3D应用,但是一年过去了,Gallery3D代码也改了很多,是时候重新做一个了。这次记录了一下过程。
准备代码
Android的源码下载可以参考 Android源码下载。但是我们并不需要全部下载。repo init -u https://android.googlesource.com/platform/manifest
之后就能够在本地的.repo目录下看到manifest.xml。打开这个xml文件能够看到Android所有的源码git地址。我们只需要Gallery2这一个的。拼一下链接就是:https://android.googlesource.com/platform/packages/apps/Gallery2。git clone之后切一个稳定版本的tag就可以开始我们的Gradle过程了(我这里使用的android-6.0.1_r68)。
导入到Android studio
在Android Studio启动界面,点击Import Project(Eclipse ADT, Gradle, etc.)
然后选中我们刚才Clone的项目一路下一步就可以了。这个时候会有一个报错:
不用惊慌,在build.gradle里面加上renderscriptTargetApi和修改下compileSDKVersion就可以了。如下:
apply plugin: 'com.android.application'android { compileSdkVersion 24 buildToolsVersion "25.0.0" defaultConfig { applicationId "com.android.gallery3d" minSdkVersion 14 targetSdkVersion 24 renderscriptTargetApi 18 renderscriptSupportModeEnabled true ndk { moduleName "libjni_eglfence" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } }}
然后再sync一下,会得到很多duplicate string的错误(Android源码里面aapt多支持一个叫product的tag,但是SDK并不支持),另外还有一张空白的图片资源导致编译不过(可能源码里面的aapt版本和SDK里面的不同,所以源码里面能编译)。我们删除这张空白的filter_show_state_button_background
图片,然后除了values和values-zh-rCN以外所有的语言资源包,然后再把剩下的strings.xml里面带有product tag的重复字符串删除一个。然后保存再次sync,这次sync就没有任何错误了,可以尝试编译了。^_^
修改错误代码
别以为这样就成功了,出现一大堆找不到类的错误。一类是在gallery2d目录下的代码,Android Studio没有导入的;一类是其他的依赖库的代码。我们很容易发现gallerycommon和src_pd目录下所有的类都没有导入进来。直接把gallerycommon/src/com/android/
和src_pd/src/com/android/
所有的包复制到Android Studio的com.android
包下,再次编译会发现已经少了很多错误。根据错误信息,还需要加入supportv4和supportv13,我们再加入后再试试。现在看起来只缺少这两个包了:
这两个从包名上看就知道是在Google源码的第三方库了。我们可以借助源码浏览工具确认它们的代码在哪里,而不需要clone整个Android的源码,方法如下:
1) 打开http://androidxref.com/,然后选中6.0.1_r10,搜索我们缺少的类名。这里我在Symble处搜索XMPMeta
确定了我们需要的库在/external/xmp_toolkit/工程下。然后clone下来
git clone https://android.googlesource.com/platform/external/xmp_toolkit
然后我们把里面的java文件通过新建一个module的形式导入到我们的Android studio里面。相似的,mp4parser和coremedia两个库也可以通过这个方式去下载下来,然后导入到Android Studio里面。现在工程结构如下:
再次编译。发现httpClient找不到。然后我发现发生这个错误的类根本没有使用过,所以直接将HttpClientFactory.java删除掉即可。最后Java已经编译通过,剩下一个NDK的编译错误了。我们直接把jni目录通过externalNativeBuild引入即可,并且zailocal.properties里面加入
ndk.dir=/Users/yutao/Library/Android/android-ndk-r10e/
现在的build.gradle长这个样子:
apply plugin: 'com.android.application'android { compileSdkVersion 24 buildToolsVersion "25.0.0" defaultConfig { applicationId "com.android.gallery3d" minSdkVersion 14 targetSdkVersion 24 renderscriptTargetApi 18 renderscriptSupportModeEnabled true externalNativeBuild { ndkBuild { abiFilters "armeabi-v7a" } } } externalNativeBuild { ndkBuild { path file("src/main/jni/Android.mk") } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } }}dependencies { compile "com.android.support:support-v4:24.2.1" compile "com.android.support:support-v13:24.2.1" compile project(':xmp') compile project(':mp4parser')}
这个时候咱们的项目就已经能成功运行啦。
意义
整个过程没有什么技术含量,只是分享一个方法,希望能帮助到一些有这类需要的同学。
幸运的是native部分并没有依赖系统里面的第三方库,否则还需要引入native的库,自己写Android.mk链接。
献上我已经做好的能直接使用的工程地址:
https://github.com/tbruceyu/GradleAndroidGallery3D
- 记录下Gradle化Android Gallery3D应用的过程
- Gradle化的Android Gallery3D App
- 记录下Android gradle的问题
- Android的Gallery3D模块介绍
- 自己的gradle记录下
- Gallery3D播放视频创建MediaPlayer的过程
- 终端下使用gradle编译android应用
- Android--关于Gradle的一些记录
- 【Android】gradle使用过程的问题解决汇总
- Gradle 使用Gradle构建Android应用的渠道包
- Android控件Gallery3D效果
- Android控件Gallery3D效果
- Android Gallery3D源码分析
- Android控件Gallery3D效果
- Android控件Gallery3D效果 .
- Android控件Gallery3D效果
- android Gallery3D效果
- Android控件Gallery3D效果
- VB 共享软件防破解设计技术初探(三)
- VI-
- 【2017年新篇章】 .NET 面试题汇总(二)
- 抓捕程序在使用中崩溃的异常并存储在文件中
- Lock和synchronized之间的那点事
- 记录下Gradle化Android Gallery3D应用的过程
- leetcode题解-355. Design Twitter
- linux常见命令
- redis3.2.8安装教程
- 【OpenCV】利用投影法进行字符分割
- Linked List Cycle
- html不建议使用的元素
- Duplicate files copied in APK META-INF/rxjava.properties
- 如何上传自己的项目到github上