项目上线流程

原创 2016年08月29日 11:21:36
一、生成keystore
1.作用
1.1 App升级:使用相同签名的升级软件可以正常覆盖老版本的软件,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本安装成功的。
1.2 App模块化:android系统允许具有相同的App运行在同一个进程中,如果运行在同一个进程中,则他们相当于同一个App,但是你可以单独对他们升级更新,这是一种App级别的模块化思路。
1.3 允许代码和数据共享:android中提供了一个基于签名的Permission标签。通过允许的设置,我们可以实现对不同App之间的访问和共享,如AndroidManifest.xml:<permission android:protectionLevel="normal" />

2.Ecplise生成方式
1.1 工具生成:选中项目右击,选择Android-Tools ,然后选中 Export Signed Application Package选项
如果没有keystore创建新的,选择Create new keystore选项,设置名称,密码完成

1.2 命令行生成:
1)dos下进入JDK的bin目录(位于jdk_xx\jre\bin目录下)
2)输入:keytool -genkey -alias qianfeng -keyalg RSA -validity 365000 -keystore qianfeng.keystore
指令解释:
-genkey 产生密钥
-alias mykey 别名 mykey
-keyalg RSA 使用RSA算法对签名加密
-validity 365000 代表有效期天数
-keystore qianfeng.keystore keystore的名字

3.Android Studio
1)选择build选项中generate signed apk

二、混淆(progruard)

1.proguard原理
Java代码编译成二进制class 文件,这个class 文件也可以反编译成源代码 ,除了注释外,原来的code 基本都可以看到。为了防止重要code 被泄露,我们往往需要混淆(Obfuscation code , 也就是把方法,字段,包和类这些java 元素的名称改成无意义的名称,这样代码结构没有变化,还可以运行,但是想弄懂代码的架构却很难。 proguard 就是这样的混淆工具,它可以分析一组class 的结构,根据用户的配置,然后把这些class 文件的可以混淆java 元素名混淆掉。在分析class 的同时,他还有其他两个功能,删除无效代码(Shrinking 收缩),和代码进行优化 (Optimization Options)。
缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java元素的名称,否则就会这样就会导致程序出错。
一, 我们用到反射的地方。
二, 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。
三, 是我们的java元素名称是在配置文件中配置好的。所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。
四,第三方jar,library

2.proguard配置
1)-dontwarn 缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类,没有正确引用。如果不配置的话,系统就会报错。
2)-keep 指定的类和类成员被保留作为 入口 。
3)-keepclassmembers 指定的类成员被保留。
4)-keepclasseswithmembers 指定的类和类成员被保留,假如指定的类成员存在的话。

3.proguard问题和风险
1)混淆错误,用到第三方库的时候,必须告诉 proguard 不要检查,否则proguard 会报错。
2)运行错误,当code 不能混淆的时候,我们必须要正确配置,否则程序会运行出错,这种情况问题最多。
3)调试苦难,出错了,错误堆栈是混淆后的代码 ,自己也看不懂。

4.不能混淆的代码
1)下面这样代码混淆的时候要注意保留。
2)Android系统组件,系统组件有固定的方法被系统调用。
3)被Android Resource 文件引用到的。名字已经固定,也不能混淆,比如自定义的View
4)Android Parcelable ,需要使用android 序列化的。
5)Java序列化方法,系统序列化需要固定的方法。
6)枚举 ,系统需要处理枚举的固定方法
7)本地方法,不能修改本地方法名
8)annotations 注解
9)数据库驱动
10)有些resource 文件
11)用到反射的地方
12)其他Android 官方建议 不混淆的,如
android.app.backup.BackupAgentHelper
android.preference.Preference
com.android.vending.licensing.ILicensingService

5.混淆配置
1)参数:
-include {filename} 从给定的文件中读取配置参数
-basedirectory {directoryname} 指定基础目录为以后相对的档案名称
-injars {class_path} 指定要处理的应用程序jar,war,ear和目录
-outjars {class_path} 指定处理完后要输出的jar,war,ear和目录的名称
-libraryjars {classpath} 指定要处理的应用程序jar,war,ear和目录所需要的程序库文件
-dontskipnonpubliclibraryclasses 指定不去忽略非公共的库类。
-dontskipnonpubliclibraryclassmembers 指定不去忽略包可见的库类的成员。
2)保留选项:
-keep {Modifier} {class_specification} 保护指定的类文件和类的成员
-keepclassmembers {modifier} {class_specification} 保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclasseswithmembers {class_specification} 保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
-keepnames {class_specification} 保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)
-keepclassmembernames {class_specification} 保护指定的类的成员的名称(如果他们不会压缩步骤中删除)
-keepclasseswithmembernames {class_specification} 保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
-printseeds {filename} 列出类和类的成员-keep选项的清单,标准输出到给定的文件
3)压缩:
-dontshrink 不压缩输入的类文件
-printusage {filename}
-whyareyoukeeping {class_specification}
4)优化
-dontoptimize 不优化输入的类文件
-assumenosideeffects {class_specification} 优化时假设指定的方法,没有任何副作用
-allowaccessmodification 优化时允许访问并修改有修饰符的类和类的成员
5)混淆
-dontobfuscate 不混淆输入的类文件
-printmapping {filename}
-applymapping {filename} 重用映射增加混淆
-obfuscationdictionary {filename} 使用给定文件中的关键字作为要混淆方法的名称
-overloadaggressively 混淆时应用侵入式重载
-useuniqueclassmembernames 确定统一的混淆类的成员名称来增加混淆
-flattenpackagehierarchy {package_name} 重新包装所有重命名的包并放在给定的单一包中
-repackageclass {package_name} 重新包装所有重命名的类文件中放在给定的单一包中
-dontusemixedcaseclassnames 混淆时不会产生形形色色的类名
-keepattributes {attribute_name,...} 保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.
-renamesourcefileattribute {string} 设置源文件中给定的字符串常量

三、打包apk
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

一个Java项目的开发流程

项目过程              1、项目启动  1)、项目组成立(公司成员、客户成员)  2)、制定项目预期目标  3)、制定项目计划周期  4)、建立好项目组成员沟通机制  ...
  • websph
  • websph
  • 2010-07-18 23:48
  • 29426

如何将java web项目上线/部署到公网

关于如何将java web上线,部署到公网,让全世界的人都可以访问的问题。小编将作出系列化,完整的流程介绍。 1.在myeclipse中开发好项目,打包成war格式,不会的同学参考以下 http:...

如何将java web项目上线/部署到公网

关于如何将Java Web上线,部署到公网,让全世界的人都可以访问的问题。小编将作出系列化,完整的流程介绍。 1.在myeclipse中开发好项目,打包成war格式,不会的同学参考以下 http:...

项目在linux上线常用命令

ps -ef|grep java            查看关于java的进程 kill  -9  +进程号             杀死tomcat...

项目上线小结

2016年5月26日经过两个半月的奋战,项目终于上线了,按照预期的计划,延期半个月左右,上线之后,平台暂时 没有出现数据和资金账目对不上等问题,大家所有人的心安定了一大半,后续虽然还是会有些...

项目从计划到上线的大概流程

第一步 项目的确定1. 经过UI、测试、前端、后端、运维对项目反复讨论 2. 讨论各个功能实现、及注意事项等 3. 确定最终的开发版本 4. 产品部门会把最终版本整理写PRD(书面说明),并确定大概上...

项目上线流程(二)

混淆代码,第三方加密,分渠道打包,渠道统计,上传需要投放的市场,自动更新     代码混淆         在build.gradle里面配置代码       ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)