1:打包步骤:
1:桌面建立一个文件夹,名字叫keystore
2:点击build下面的 ,如下:
 
 
3:会出现如下界面:
4:下一步:
5:如果有keystore,请点击 choose existing,选择以前的keystore,同时输入密码和项目名字,最后点击下一步,如果没有keystore,请选择 create new keystore,跳转如下界面:
上面的参数分别是:
keystore path:存放keystore的路径,一般建议在桌面建立一个文件夹,放这个文件,
password:密码
confirm:重复输入密码
Alias:别名,唯一识别名(一般建议使用项目的名字)
Frist and last name:项目的名字
6:写完以上信息,点击ok,进入如下界面:
7:点击下一步,进入下一个页面:(如果开发工具设置了密码,会让输入密码,否则跳过这不)
8:最后一步,选择apk的存放路径:(建议一般情况放到keystore里面)
以上就是最简单的打包.
 
代码混淆:
其中我们打包的时候为了防止被反编译,需要对代码进行混淆;首先在Android studio里面开启代 码混淆的方式很简单,默认Android studio不开启代码混淆,
其中开启代码混淆的字段为:minifyEnabled,false不开启代码混淆,true开启代码混淆,图如下:
proguardFiles:后面两个文件名字,第一个是代表系统帮我们做的混淆,第二个代表需要我们自己写混淆规则.
混淆规则写在:proguard-rules.pro或者proguard-rules.txt里面
 
-optimizationpasses 5 # 指定代码的压缩级别(混淆次数可以定义,但是一般混淆5次)
-dontusemixedcaseclassnames # 是否使用大小写混合(加上他表示使用大小写混合)
-dontpreverify # 混淆时是否做预校验(表示混淆的时候会不会报错)
-verbose # 混淆时是否记录日志(加上他表示混淆的时候记录日子)
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法(指定混淆的时候所采用的算法)
 
声明那些类不能被混淆:
 
-keep public class * extends android.app.Activity # 保持哪些类不被混淆 -keep public class * extends android.app.Application # 保持哪些类不被混淆 -keep public class * extends android.app.Service # 保持哪些类不被混淆 -keep public class * extends android.content.BroadcastReceiver # 保持哪些类不被混淆 -keep public class * extends android.content.ContentProvider # 保持哪些类不被混淆 -keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆 -keep public class * extends android.preference.Preference # 保持哪些类不被混淆 -keep public class com.android.vending.licensing.ILicensingService # 保持哪些类不被混淆
 
不能混淆的包括如下:
-keepclasseswithmembernames class * { # 保持 native 方法不被混淆 native <methods>; } -keepclasseswithmembers class * { # 保持自定义控件类不被混淆 public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * {# 保持自定义控件类不被混淆 public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆 public void *(android.view.View); } -keepclassmembers enum * { # 保持枚举 enum 类不被混淆 public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆 public static final android.os.Parcelable$Creator *; }
 
注意: shrinkResources 表示是否移除图片资源 true表示移除,false 表示不移除
 
 
Android studio 多渠道打包:
 
目的:多渠道打包的目的是什么?
多渠道打包的目的是为了统一app在各个平台的下载量,一般集成友盟,同时会集成友盟统计.
 
第一步:在注册文件修改一下文件:AndroidManifest.xml中修改以下值:
 
<meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" />
修改为:
先你必须在AndroidManifest.xml中的meta-data修改以下的样子:
<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />
 
其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定义配置的值
build.gradle文件就利用productFlavors这样写:
 
productFlavors { wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } baidu { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"] } c360 { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"] } uc { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"] } }
 
其中[UMENG_CHANNEL_VALUE: "wandoujia"]就是对应${UMENG_CHANNEL_VALUE}的值。
 
最新更新
后来发现上面的重复代码太多,就在网上又发现了一个更简洁的写法
 
productFlavors { wandoujia {} baidu {} c360 {} uc {} productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } }
 
其中name的值对相对应各个productFlavors的选项值,这样就达到自动替换渠道值的目的了。
这样生成apk时,选择相应的Flavors来生成指定渠道的包就可以了,而且生成的apk会自动帮你加上相应渠道的后缀,非常方便和直观。
 
发布步骤:
一般情况下发布平台包括360,豌豆荚,91助手,应用宝,腾讯手机助手
首先以360为例:
第一步:首先需要打包apk,接下来交给测试区测试.当测试测试的没有BUG,我们就可以拿着apk去上线.
第二步:打开360开发者中心,(http://opengame.360.cn),选择移动平台接入,如下:
 
 
第三步:点击移动应用,跳转到如下界面(http://dev.360.cn)
 
 
第四步:选择软件发布,如果没有登陆,会跳转到登陆页面,进行登陆,或者注册,登陆成功以后进入如下界面,点击软件按钮:
 
 
第五步:点击软件按钮,进入app发布页面:
(1):上传apk
(2):上传版权证明
(3):选择语言
(4):选择资费类型
(5):应用简介
(6):上传图标
(7):提交审核,立即发布.
 
注意:上传apk的时候需要进行加固,加固完以后需要进行重新签名,签名步骤如下:
第一步:首先从360下载到apk
第二部:将apk与keystore.jsk 放到同一个文件夹下面
第三部:启动终端命令行,cd进去到当前文件夹:
输入如下格式:
 
arsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 【你的签名文件】 【代签名的apk】 【你的alias】 -storepass 【你的密码】
代码如下:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keystore.jks app-release.apk TestApk -storepass 123456
 
注意:【你的签名文件】必须带后缀,否则会报签名失败的错误.
【代签名的apk】 使用带后缀的全部名字
【你的alias】 打包时候指定的,一把使用项目名字
【你的密码】 就是密码
 

app打包,发布(同步发生冲突)的更多相关文章

  1. 【2】IOS APP打包发布

    目的: 本文的目的是对IOS APP打包发布做了对应的介绍,大家可根据文档步骤进行mac环境部署: 申请苹果开发者账号 此处略 创建申请证书 这样做的目的就是为你的电脑安装发布许可证,只有这样你的电脑 ...

  2. iOS开发之app打包发布流程

    一.准备工作 苹果开发者中心 1.申请苹果开发者账号 首先需要申请苹果开发者账号才能在APP store 里发布应用. 开发者账号分类:(1)个人开发者账号 (2)企业开发者账号 主要的区别是:点击这 ...

  3. app打包(同步发生冲突)

    1:打包步骤: 1:桌面建立一个文件夹,名字叫keystore 2:点击build下面的 ,如下:     3:会出现如下界面: 4:下一步: 5:如果有keystore,请点击 choose exi ...

  4. xcode7--iOS开发---将app打包发布至app store

    时隔3个月再次接触应用打包,又是一顿折腾 说说这次的感受吧: 变得是打包时间减少到4小时(其中大部分时间还是xcode7或者是iOS9的原因),不变的是还是一如既往的坑!! 好了,废话不多说,下面讲讲 ...

  5. IOS App打包发布完整流程

    注册成为开发者 登录苹果开发者中心,点击Accounts,在这里需要你填写你的Appple ID进行登录,如果没有,点击这里申请一个,填写信息就成,这里就不再赘述.申请完成之后,使用申请的AppID进 ...

  6. App 打包并跳过 AppStore 的发布下载

    一.App 打包 (编译 -> 链接 -> 打包) 1) 下载发布版的证书并安装. 2)Target -> Build Setting,改为发布版本的 profile 3) Targ ...

  7. hbuilder IOS APP 打包与发布2

    在上一篇的<hbuilder IOS APP 打包与发布>中,请求 的 是APP ids .  ios开发证书 .和开发配置文件  ,   这一篇中就不写发布证书和配置文件的请求,因为流程 ...

  8. RN在Android打包发布App

    参考资料:http://www.jianshu.com/p/b8811669bcb6 RN在Android打包发布App 1-:生成一个签名密钥你可以用keytool命令生成一个私有密钥.在Windo ...

  9. 带你从零学ReactNative开发跨平台App开发[expo 打包发布](八)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

随机推荐

  1. 3种创建、调用JavaScript对象的方法

    hey you guys,两个月没有写技术博客了.作为一名有理想.有抱负的程序员,两个月不写技术博客,真该打.业精于勤,荒于嬉.行成于思,毁于随.勤奋是必不可少的,今后养成一周至少一篇博客的习惯.好了 ...

  2. IE,火狐,谷歌浏览器下js判断滚动条是否已拉到页面最底部

    E/FF/Chrome下document.documentElement和document.body的 scrollHeight/scrollTop/clientHeight 以及判断滚动条是否已拉到 ...

  3. Flask学习记录之Flask-WTF

    Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单 一.定义一个web表单 使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的 ...

  4. 文成小盆友python-num9 socket编程

    socket编程 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意思 ...

  5. List容器

    List 容器 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用list容 ...

  6. PhoneGap and Titanium

    http://mobile.51cto.com/web-338270.htm http://www.udpwork.com/item/6117.html http://blog.cnbang.net/ ...

  7. (2) 假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等

    /** * 第一种方式: * 实现思路:将字符串通过getBytes方法转换为byte数组,或者通过toCharArray()转换为char数组 * 然后先调用Arrays的sort方法进行排序,再调 ...

  8. Cracking the coding interview 第二章问题及解答

    文章的缘由可以参考此篇文章.目前完成了第二章,代码放在github上,地址在此.问题的描述都在对应的代码文件中.其他的章节仍在在进行中. 如果代码有问题,欢迎指正,谢谢. yetuweiba

  9. POJ2828---线段树与逆序数&&DUTOJ1210---逆序对构造排列

    来看这样一道问题:http://acm.dlut.edu.cn/problem.php?id=1210 题目大意:对于一个1-n的排列,a1,a2,a3,a4...an我们把满足i < j,ai ...

  10. POJ1061青蛙的约会(扩展欧几里德算法)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 102239   Accepted: 19781 Descript ...