android中的两种打包方式,及多渠道打包
2017-03-15 10:00
405 查看
签名时什么:
android应用文件(apk)中保存的一个特别字符串
签名的作用:
用来标识不同的应用开发者的身份,比如开发者A,开发者B,如果一个开发者开发多款应用最好使用同一个签名。
为什么要签名:
1.系统要求的,Android系统要求每一个Android应用程序都必须经过数字签名才能安装到系统中,也就是说,如果一个Android应用程序没有经过数字签名是不能安装到系统中的(平时连接手机直接安装手机上的apk,打包的时候取得是系默认的签名文件,也是已经签名了的)。
2.不同程序员开发的应用程序包名可能会相同,这就导致一个应用覆盖另一个应用。如果只有包名概念,那么如果B应用与A应用包名一样,那就实现了B覆盖了A,这样显然是不对的。但事实上我们安装的应用,经管包名一样,但也不会覆盖,就是因为签名不一样,只要签名不一样,就不会被覆盖.(包名一样,签名不一样,在同一台手机上安装,就会有提示,需要卸载再安装。)
常规打包方方式:
第一种:选择菜单栏里的build,打开后选择Generate Signed Apk就会看到这样的一个界面:
当然第一次进入这个界面,Key store path是空的,这个时候选择create new一个新的就可以了,进入这个界面:
在这里填写一下,最上面选个保存路径,不要乱填,后面打包时候会用到,以后直接拿来用就可以了,不至于每次都重新new一个。完了点击ok就可以了。完了返回上个界面,点击next,进入下面这个页面:
看最上面APK Destination Folder这个路径是打包生成apk的路径,一般都会选app\build\outputs\apk,第一次可能没有apk这个目录,在工程目录中的build下的目录生成一个apk文件夹就可以了。我们打包后的apk就在这里了。点击Finish,之后就完成打包了,可以在对应目录中看到这样:
这里是选择了打好几个包,你这里如果选release,则打出的是release.apk,如果刚刚build Type里选择的是debug,则打出的是debug.apk 这里就结束了。
第二种,用命令方式打包:
打开Project Structrue,或者点击鼠标右键打开open moudle setting也能进入下面这个界面:
第一次进来,是没有release的,这个是我加的,显示的是config,选中,改为release或者debug,可以同时添加这两种,右侧,把对应刚刚签名填的对应信息输入,点击ok就可以了。完了后,我们再次打开,这次选中BuildTypes,在Signing Config这里选release,如果是debug就选debug好了。这时候app下的build.gradle里会显示这样的配置:
这里我选了一个release,如果你选择两种的话,debug也会相应的显示出来。结束配置,开始敲命令了:
从下面这张图,通过BUILD SUCCESSFUL可以看出我们打包成功了,这里打了6个apk包,用时1分过点。
最后我们看看多渠道打包(利用友盟实现多渠道打包):
渠道的概念:
就是channel,例如百度,小米,360,安卓市场等等,每一个都是一个渠道,而每一个对应这个渠道的apk文件叫渠道包。
经常听到某某某说要打几百个渠道包,为什么要提供如此多的渠道包?
应用在请求网络时携带渠道信息,方便后台统计,因此我们在安装包里添加不同的标识,去区别。
友盟多渠道打包:
其实我们刚刚实现的就是,只是要加入相应的配置,才能完成,看清单文件….
在Manifest.xml下加这样两个配置:
下面那个value的这串“${UMENG_CHANNEL_VALUE}”一定要在build.gradle下指定一个值,不然Mainfest.xml这个就编译不过去,为了这点纠结了好一会,加入这样一行代码,在defaultConfig下:
在build.gradle的根目录android下,加入这样的配置:
最后是整个build.gradle代码,看看就明白了:
配置好后,用上面两种常规打包方法,就会把productFlavors下的所有渠道包都打完。
美团多渠道打包:
原理:把一个Android应用包当做zip文件包进行解压,然后发现签名生成的目录下(META_INF)添加一个空文件,不需要重新签名。利用这个机制,该文件名就是渠道名,这种方式不需要重新签名步骤,非常高效。
优点:打包速度非常快,几百个包一分钟就能打完。
**缺点:**google如果变换了打包规则,当在META-INF时添加文件需要重新打包时,这种方式就不适合了。还有就是不安全,可以通过工具被修改渠道包。
具体用法参考:美团打包原理及用法
360多渠道打包:
原理:apk文件的本质是zip文件,利用zip文件特性,可以添加comment(摘要)”的数据结构特点,在文件的末尾写入任意的数据,而不用重新解压zip文件,就可以将渠道信息写入摘要区。
优点: 打包速度快,相对于美图打包来说,提高了修改渠道名的门槛,对应有加密方式,渠道名不容易被修改。
缺点:仍然存在不安全风险,会被修改渠道包。
结论:更多的还是都在用友盟的多渠道打包,会慢,但更安全
好了就到这里了。有问题拍砖,多多指教,代码就不上传了,貌似真没那个必要……忽然想到一句叫余生请多多指教,嗯嗯,相互指教吧,闻道有先后,术业有专攻,如是而已…..
转载请标明:http://blog.csdn.net/zxyudia/article/details/62216014
android应用文件(apk)中保存的一个特别字符串
签名的作用:
用来标识不同的应用开发者的身份,比如开发者A,开发者B,如果一个开发者开发多款应用最好使用同一个签名。
为什么要签名:
1.系统要求的,Android系统要求每一个Android应用程序都必须经过数字签名才能安装到系统中,也就是说,如果一个Android应用程序没有经过数字签名是不能安装到系统中的(平时连接手机直接安装手机上的apk,打包的时候取得是系默认的签名文件,也是已经签名了的)。
2.不同程序员开发的应用程序包名可能会相同,这就导致一个应用覆盖另一个应用。如果只有包名概念,那么如果B应用与A应用包名一样,那就实现了B覆盖了A,这样显然是不对的。但事实上我们安装的应用,经管包名一样,但也不会覆盖,就是因为签名不一样,只要签名不一样,就不会被覆盖.(包名一样,签名不一样,在同一台手机上安装,就会有提示,需要卸载再安装。)
常规打包方方式:
第一种:选择菜单栏里的build,打开后选择Generate Signed Apk就会看到这样的一个界面:
当然第一次进入这个界面,Key store path是空的,这个时候选择create new一个新的就可以了,进入这个界面:
在这里填写一下,最上面选个保存路径,不要乱填,后面打包时候会用到,以后直接拿来用就可以了,不至于每次都重新new一个。完了点击ok就可以了。完了返回上个界面,点击next,进入下面这个页面:
看最上面APK Destination Folder这个路径是打包生成apk的路径,一般都会选app\build\outputs\apk,第一次可能没有apk这个目录,在工程目录中的build下的目录生成一个apk文件夹就可以了。我们打包后的apk就在这里了。点击Finish,之后就完成打包了,可以在对应目录中看到这样:
这里是选择了打好几个包,你这里如果选release,则打出的是release.apk,如果刚刚build Type里选择的是debug,则打出的是debug.apk 这里就结束了。
第二种,用命令方式打包:
打开Project Structrue,或者点击鼠标右键打开open moudle setting也能进入下面这个界面:
第一次进来,是没有release的,这个是我加的,显示的是config,选中,改为release或者debug,可以同时添加这两种,右侧,把对应刚刚签名填的对应信息输入,点击ok就可以了。完了后,我们再次打开,这次选中BuildTypes,在Signing Config这里选release,如果是debug就选debug好了。这时候app下的build.gradle里会显示这样的配置:
这里我选了一个release,如果你选择两种的话,debug也会相应的显示出来。结束配置,开始敲命令了:
从下面这张图,通过BUILD SUCCESSFUL可以看出我们打包成功了,这里打了6个apk包,用时1分过点。
最后我们看看多渠道打包(利用友盟实现多渠道打包):
渠道的概念:
就是channel,例如百度,小米,360,安卓市场等等,每一个都是一个渠道,而每一个对应这个渠道的apk文件叫渠道包。
经常听到某某某说要打几百个渠道包,为什么要提供如此多的渠道包?
应用在请求网络时携带渠道信息,方便后台统计,因此我们在安装包里添加不同的标识,去区别。
友盟多渠道打包:
其实我们刚刚实现的就是,只是要加入相应的配置,才能完成,看清单文件….
在Manifest.xml下加这样两个配置:
//友盟统计要用到的 <meta-data android:name="UMENG_APPKEY" android:value=" 58c79e572ae85b5073000edf" /> //多渠道打包配置 <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
下面那个value的这串“${UMENG_CHANNEL_VALUE}”一定要在build.gradle下指定一个值,不然Mainfest.xml这个就编译不过去,为了这点纠结了好一会,加入这样一行代码,在defaultConfig下:
// 默认是umeng的渠道 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
在build.gradle的根目录android下,加入这样的配置:
// 友盟多渠道打包 productFlavors { wandoujia {} _360 {} baidu {} xiaomi {} tencent {} taobao {} ........ } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
最后是整个build.gradle代码,看看就明白了:
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "user.example.com.um_statistics" minSdkVersion 17 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" // 默认是umeng的渠道 manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"] } signingConfigs { release { keyAlias 'amelon' keyPassword 'password' storeFile file('C:/Users/user/Desktop/amelon.jks') storePassword 'password' } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' renderscriptDebuggable false } } // 友盟多渠道打包 productFlavors { wandoujia {} _360 {} baidu {} xiaomi {} tencent {} taobao {} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } //给apk添加对应的版本号: applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk") output.outputFile = new File(outputFile.parent, fileName) } } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.umeng.analytics:analytics:latest.integration' compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12' }
配置好后,用上面两种常规打包方法,就会把productFlavors下的所有渠道包都打完。
美团多渠道打包:
原理:把一个Android应用包当做zip文件包进行解压,然后发现签名生成的目录下(META_INF)添加一个空文件,不需要重新签名。利用这个机制,该文件名就是渠道名,这种方式不需要重新签名步骤,非常高效。
优点:打包速度非常快,几百个包一分钟就能打完。
**缺点:**google如果变换了打包规则,当在META-INF时添加文件需要重新打包时,这种方式就不适合了。还有就是不安全,可以通过工具被修改渠道包。
具体用法参考:美团打包原理及用法
360多渠道打包:
原理:apk文件的本质是zip文件,利用zip文件特性,可以添加comment(摘要)”的数据结构特点,在文件的末尾写入任意的数据,而不用重新解压zip文件,就可以将渠道信息写入摘要区。
优点: 打包速度快,相对于美图打包来说,提高了修改渠道名的门槛,对应有加密方式,渠道名不容易被修改。
缺点:仍然存在不安全风险,会被修改渠道包。
结论:更多的还是都在用友盟的多渠道打包,会慢,但更安全
好了就到这里了。有问题拍砖,多多指教,代码就不上传了,貌似真没那个必要……忽然想到一句叫余生请多多指教,嗯嗯,相互指教吧,闻道有先后,术业有专攻,如是而已…..
转载请标明:http://blog.csdn.net/zxyudia/article/details/62216014
相关文章推荐
- android gradle两种多渠道打包方式
- Android多渠道打包两种方式(带秒速打包)
- Android美团多渠道打包方式
- Android几种常见的多渠道(批量)打包方式介绍
- Android多渠道打包三种方式
- Android几种常见的多渠道(批量)打包方式介绍
- Android高阶之Android studio友盟多渠道打包方式
- 【Android 进阶】友盟的多渠道打包方式
- android 中三种多渠道打包方式
- 【Android 进阶】360 的多渠道打包方式
- Android多渠道打包汇总(六)—— 美团的多渠道打包方式
- Android几种常见的多渠道(批量)打包方式介绍
- Android 多渠道打包的几种方式
- Android常用多渠道打包方式实践
- android中多渠道打包的三种方式
- Meteor android apk打包两种方式
- 更便捷的Android多渠道打包方式
- Android Studio签名打包的两种方式
- Android进阶之路 - AndroidStudio内自带的精简多渠道打包方式
- Android: Android Studio签名打包的两种方式(zz)