【移动应用开发技术】Android 多渠道打包的示例分析_第1页
【移动应用开发技术】Android 多渠道打包的示例分析_第2页
【移动应用开发技术】Android 多渠道打包的示例分析_第3页
【移动应用开发技术】Android 多渠道打包的示例分析_第4页
【移动应用开发技术】Android 多渠道打包的示例分析_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】Android多渠道打包的示例分析

这篇文章将为大家详细讲解有关Android多渠道打包的示例分析,在下觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。我们在app正式发布的时候一定会使用正式签名的方式来打包,这种方式只能生成唯一的一个包,但是如今的应用商店非常多,如:小米、OPPO、360、百度、豌豆荚、应用宝等等。而我们只有一个apk文件要投入到这么多的应用商店中去,如果你的公司不需要统计每个应用商店的实际下载使用量的话,那倒是不会有这样的问题。但是,如果你的公司就是需要统计每个商店的实际下载使用情况,那么你将如何去识别当前用户是从哪一个商店下载来的呢?出现问题原因是:我们使用的apk安装包当前仅有一个。假设,我们可以向apk内植入一个字符串,比如我给发布到小米商店的apk中植入“xiaomi”,然后拷贝一份apk安装包发布到小米商店中,给百度植入“baidu”,然后也拷贝一份发布到百度商店中,然后通过JAVA代码在用户从某一个商店中下载并使用时,我获取这个字符串,然后返回给后台,这不就可以知道用户从哪个商店下载了吗!多渠道就是指我们的应用程序可以从不同的商店下载,不同的应用商店就是不同的渠道。那你可能会有疑惑,我们为什么要知道用户从哪个渠道下载的呢?这个问题其实与利益息息相关,你这样想。假如你写一个app发布到不同的商店上,你肯定会关注究竟哪一个商店的用户使用量比较多、下载量比较大的问题,你可能手头没有那么多经济去每一个商店平台都推广你的app,所以你要记录哪个商店用户量最大,然后着重推广。友盟打包说了这么多,相信你已经明白多渠道打包的重要性了。既然我们可以向每一个apk中植入一个标志这商店名称的字符串,那么如果一个一个的来的话,显然是一个庞大的工作,没有多大实际意义,而且apk文件是无法直接向里面添加一个外部文件的,你需要其他的手段来实现,那么我们先来看友盟多渠道打包的方式。友盟的实现方式是通过xxx.keystore文件来进行一个一个的压包,通过代码的方式来分别生成一个你指定的应用商店的对应apk文件。这种方式会比较慢,如果你的需求是要投入到几百上千个商店的话,显然生成文件的速度会非常慢。但如果你的需求量在几十上百,我建议你可以使用友盟来打包,公司也通常使用这种方式。那么我们看看如何实现吧!一、引入友盟支持在工程列表(AndroidManifest.xml)文件中加入友盟提供的支持,这个与Activity并列层级。<!--添加友盟支持--><meta-dataandroid:value="${UMENG_CHANNEL_VALUE}"android:name="UMENG_CHANNEL"/><!--添加友盟支持--><meta-dataandroid:value="${UMENG_CHANNEL_VALUE}"android:name="UMENG_CHANNEL"/>二、添加闭包然后在app的build.gradle中添加以下代码,目的是为了生成对应的应用商店的apk,添加位置在android闭包下,以下代码不难理解。注意:在gradle中是无法使用数字开头的名字,所以你应该懂得变更一下。

//友盟闭包

productFlavors

{

wandoujia

{}

xiaomi

{}

baidu

{}

yingyongbao

{}

//注意

360:gradle

中不能以数字开头

_360{}

}

productFlavors.all

{

flavor

->

flavor.manifestPlaceholders

=

[UMENG_CHANNEL_VALUE:

name]

}这里注意一下,也许你会报这个错误:ERROR:Allflavorsmustnowbelongtoanamedflavordimension.ERROR:Allflavorsmustnowbelongtoanamedflavordimension.解决方法就是在上面的defalutConfig闭包中添加内容:flavorDimensions"versionCode"flavorDimensions"versionCode"然后再同步一下就没有问题了。三、签名打包接下来就是打包的过程了,很简单,我们只需要选中如下图中的各个应用商店的版本即可,然后它就会在你设定的目录下生成对应的apk文件了。如果对签名打包不懂的可以看这篇文章:AndroidApp正式签名打包流程这就是我的项目生成的对应的apk文件所在的文件夹,点进去就会看到安装包啦。四、添加版本号当然了,你可能希望加入当前app的开发版本号,这样就对每个版本升级时所用的apk包就一目了然了。这是你需要把当前appbuild.gradle中的deflautConfig闭包下的versionName给设置到打包生成的apk名中。那代码是这样的:

//为多渠道包添加

app

版本号

applicationVariants.all

{

variant

->

variant.outputs.all

{

output

->

def

outputFile

=

output.outputFile

if

(outputFile

!=

null

&&

outputF.endsWith(".apk"))

{

def

fileName

=

outputF.replace(".apk",

"-${

defaultConfig.versionName

}.apk")

outputFileName

=

fileName;

}

}

}这是一段groovy语言,通常在jvm中使用,可以很好的和java代码配合。你只需要将它添加到刚刚写的友盟闭包后面就可以了,如这样:然后你再一次打包一下,就可以在目录中看到apk文件了,一个是刚刚没有添加的默认版本,一个是拥有版本号。注意:这里会有一个警告信息,内容是这样:WARNING:API'variantOutput.getPackageApplication()'isobsoleteandhasbeenreplacedwith'variant.getPackageApplicationProvider()'.Itwillberemovedattheendof2019.WARNING:API'variantOutput.getPackageApplication()'isobsoleteandhasbeenreplacedwith'variant.getPackageApplicationProvider()'.Itwillberemovedattheendof2019.它是说这个API在2019年末将要被替换成后面的一个,不过别担心,只要你在升级gradle的时候注意一下就好了,在未来它要被替换的时候,你也要做出相应的更改!五、获取渠道信息到目前为止,我们还没真正的看到这样打包有什么用处。不着急,我们需要将每个apk文件发布到对应的商店以后才需要获取这个字符串,这样才能够真正的识别用户在哪个商店中下载来的,然后在用户使用量最大的商店中去大力推广。那么如何获取这个字符串呢?我就简单一点,在MainActivity中直接获取这个字符串了,在实际开发中,显然是要把这个信息传给后台进行统计的,不然没有任何意义。我们的获取代码如下:还记得我们在meta-data中定义了UMENG_CHANNEL属性的名字吗,现在我们就可以利用它来获取字符串了。import

android.content.Context;

import

android.content.pm.ApplicationInfo;

import

android.content.pm.PackageManager;

public

class

ChannelUtil

{

public

static

String

getChannel(Context

context)

{

PackageManager

pm

=

context.getPackageManager();

ApplicationInfo

appInfo

=

null;

try

{

appInfo

=

pm.getApplicationInfo(context.getPackageName(),

PackageManager.GET_META_DATA);

return

appInfo.metaData.getString("UMENG_CHANNEL");

}

catch

(PackageManager.NameNotFoundException

e)

{

e.printStackTrace();

}

return

"";

}

}然后我在启动app的时候使用toast验证一下是否如我们想象的一样:获

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论