腾讯广告gradle编译
A. Gradle--多环境编译打包
前段时间产品经理提了个需求,测试环境,预发布环境,生产环境编译下的app需要在同一步手机同时存在,实现是可以的,但是得有三个环境下的不同applicationId,网络地图key,域名,桌面logo,刚开始是想需要什么环境就换什么类型,很麻烦,每次都要换一次重新编译,我就在想有什么便捷的方法一键设置更换,gradle其中的Flavors功能可以实现我想要的。
这个是主项目中build.gradle中的配置,有三个环境我命名为 xiaoming_test,xiaoming_ready,xiaoming_proct,并有不同的applicationId,BAIDU_MAP_KEY,HTTP_HEAD,HTTP_HEAD_java,app_icon,(解释一下,有两条域名是因为后面后台是用java开发而做的区分),到这里应该大家有疑问,举个栗子,我们一般开发的第三方key是在mainifests进行注册申请的,而我们gradle如何去引用资源的。这里有两种引用方式,直接引用,自定义引用。
引用logo在application的icon属性命名为app_icon,$表示引用这个命名,对应的是gradle的配置。
在mainifests自定义为HTTP_HEAD,value值通过${HTTP_HEAD}引用,getHttpHead()获取自定义注册的域名值。从而实现每次请求对应的域名,只需在gradle里设置。
只需打开studio的BuildVariarts设置,选择需要的环境即可重新编译不同的apk,方便快捷的做到一键设置快速打包。
B. Gradle如何只编译而不打包资源
gradle tasks
看看哪个task是你要的
C. Gradle编译-APK编译过程
在早期的Android设备中(Android5.0以下)都是使用的Dalvik虚拟机,Dalvik支持经过转换的.dex文件。.dex格式是专为Dalvik设计的一种适合内存和处理器速度有限的系统。
但是在Android5.0,google用ART全面取代的Dalvik。Android7.0中又添加了JIT编译器,使得Android性能也有不少提升。
上图为从Android源文件开始,最终到APK的过程。
下面博客文章详细介绍了dalvik虚拟机,可供参考学习。
https://www.cnblogs.com/lao-liang/p/5111399.html
dvm(art)和jvm属于不同的虚拟机平台,不同平台要求执行的文件类型也就不一样
dvm(art)--.dex文件
jvm--.class文件
在编译和生成上
java source --.class文件 ---jvm执行
java source --.class文件 ---.dex文件 --- dvm执行
Android Runtime (ART) 是 Android 上的应用和部分系统服务使用的托管式运行时。ART 及其前身 Dalvik 最初是专为 Android 项目打造的。作为运行时的 ART 可执行 Dalvik 可执行文件并遵循 Dex 字节码规范。
ART 和 Dalvik 是运行 Dex 字节码的兼容运行时,因此针对 Dalvik 开发的应用也能在 ART 环境中运作。不过,Dalvik 采用的一些技术并不适用于 ART。
ART的功能
1.预先 (AOT) 编译
使用ART编译器时,应用程序在安装期间就已经把dex字节码翻译并存储在设备上,运行时,只需要执行这些翻译好的就可以了,因此执行速度也快了不少。
2.垃圾回收方面的优化
3.开发和调试方面的优化
构建流程涉及许多将项目转换成 Android 应用软件包 (APK) 的工具和流程。构建流程非常灵活,因此了解它的一些底层工作原理会很有帮助。
D. 如何实现 Gradle 工程上的增量编译
到此 NDK的配置完成,开始进行 fresco的编译 1.首先从github上下载项目 2.将项目导入到Android Studio中: 选择 Open an exsiting Android Studio Project 选择文件夹下的 build.gradle文件
E. gradle编译war包如何修改生成的目录结构
在build.gradle文件配置这样的话:apply plugin: "war",然后在工程上右击,选择run as->gradle build...,选择clean、build、war这几个task,就可以打war包了,实际上build就能完成打包任务。
F. Shell脚本自动编译打包Gradle项目并docker部署
需要用到2个文件,项目的build.gradle文件和自动化shell脚本(这里我们命名为auto.sh)
一、修改build.gradle文件
新增task配置节,注意build.gradle和Dockerfile在同一目录下
二、新增auto.sh
G. Android插件化突破应用市场无法上广告的问题
先简单的描述一下在广告方面遇到的问题.
开发一款App有了一定的用户量之后通常会想接入第三方广告来实现变现,
然而在很多市场不让这类带广告的App上架,除非接的是他们家的广告.
在这里我只能呵呵了.这点困难就想难倒我们.
那接下来ShowTime.怎么做呢?
没错,就是插件化.
以广点通广告为例
这里我使用的是360开源的 RePlugin ,具体介绍和使用方法请看官方文档.
一. RePlugin插件接入指南
第 1 步:添加 RePlugin Plugin Gradle 依赖
在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-plugin-gradle 依赖:
第 2 步:添加 RePlugin Plugin Library 依赖
在 app/build.gradle 中应用 replugin-plugin-gradle 插件,并添加 replugin-plugin-lib 依赖:
接下来您就可以像正常接入广告那样,开发插件。生成出来的是APK,既可以“安装到设备”,又可以“作为插件”使用。
二. RePlugin主程序接入指南
第 1 步:添加 RePlugin Host Gradle 依赖
在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-host-gradle 依赖:
第 2 步:添加 RePlugin Host Library 依赖
在 app/build.gradle 中应用 replugin-host-gradle 插件,并添加 replugin-host-lib 依赖:
第 3 步:配置 Application 类
三. 宿主App 调用 插件广告
1.编译插件广告,将生成的xx.apk包重命名xx.jar
将 xx.jar放到宿主App的 assets/plugins 目录下 , Replugin将会自动获取该内置插件
2.处理广点通开屏广告
由于广点通开屏广告的展示点击都由SDK封装处理了.
我们这里采用的方式是,由宿主跳转到插件的闪屏页,在插件中完成请求,展示,点击结束后回到宿主的主页面.
(1)宿主跳转到插件Activity
(2)插件开屏广告请求处理,就按正常的广告逻辑走
(3)插件回到宿主的主页面
(4)宿主的清单文件中添加必要配置,否则广告无反应
注意 : 尽量使宿主和插件的包名一致,已避免广告无收益
3.处理广点通原生广告
广点通原生广告不同于开屏广告,其展示曝光和点击曝光都由自己处理.
我们只能通过反射的方案去请求广告
(1)在插件中先对广告请求做一层封装
(2)宿主中反射LoadManager的requestNativeAD()方法
a.拿到插件的ClassLoader
b.取得需要反射的类
c.由于请求广告的requestNativeAD()方法中有一个参数是接口.
(这里得使用动态代理)
取得被代理接口
d.接下来就是反射请求接口了
注意传入的Context必须是插件的Context
e.在动态代理中取得回调
这里我使用了EventBus将回调的广告传到请求的界面中
点击曝光的反射
四.最后,第一次写文章,欢迎点评
宿主App : https://github.com/AndWong/RePluginHostForAD/tree/master/app
插件App : https://github.com/AndWong/RePluginHostForAD/tree/master/pluginApp