Android项目从零到上线的全过程

nengdu1 7年前
   <h2><strong>写在最前面</strong></h2>    <p>个人开发者的开发Android的热潮已过,目前实在不太适合个人开发者的生存。但是没事的时候运用新技术写点小软件,开源出来跟大家一起学习,一起营造一个好的开发环境。</p>    <h2><strong>软件立项及方向选择</strong></h2>    <p>因为自己的一个想法开始做这个项目,或者在实际开发中由产品经理立项。由于本人不会后端,所以选择的是三方开源API。</p>    <p>百度apistore ——里面有很多可以用的API接口,有付费的也有免费的。</p>    <p>你也可以直接用 Bmob后端云 ——一个强劲的后端,免去所有服务器端编码工作量</p>    <p>本软件包含两大模块</p>    <ul>     <li> <p>美拍视频 Api 取自 美拍Api</p> </li>    </ul>    <p style="text-align:center"><img src="https://simg.open-open.com/show/e41dd781c9558b0ebe64c3b4f00bb0bb.jpg"></p>    <p>美拍视频</p>    <ul>     <li> <p>知乎日报 Api 取自 ZhihuDailyPurify</p> </li>    </ul>    <p style="text-align:center"><img src="https://simg.open-open.com/show/f274dda18f3d23dff70bd2c5d75c6b83.jpg"></p>    <p style="text-align:center">2.jpg</p>    <h2><strong>原型设计</strong></h2>    <p><a href="/misc/goto?guid=4958968131960097456" rel="nofollow,noindex">墨刀</a> ——免费的移动应用原型与线框图工具</p>    <p><a href="/misc/goto?guid=4959723215551419105" rel="nofollow,noindex">人人都是产品经理</a> ——产品经理、产品爱好者学习交流平台</p>    <h2><strong>UI设计</strong></h2>    <p>UI设计大家都知道PS或者coreldraw,当然作者只会切图。本项目全部运用Android material design设计风格</p>    <p>官方Material Design详细介绍文档: <a href="/misc/goto?guid=4958864691365506174" rel="nofollow,noindex">http://www.google.com/design/spec/material-design/introduction.html</a></p>    <h2><strong>框架的搭建</strong></h2>    <p>现在的MVP模式越来越流行。所以框架主体选用了MVP+RxJava+Retrofit+okhttp3</p>    <p>具体可查看: <a href="/misc/goto?guid=4959723215681804428" rel="nofollow,noindex">一个优秀的Android应用从建项目开始</a></p>    <h2><strong>开发</strong></h2>    <p>这个阶段是最简单的,详细怎么开发作者就不阐述了。在这里作者给出本项目所用到的东西:</p>    <ul>     <li>CoordinatorLayout——使用CoordinatorLayout打造各种炫酷的效果</li>     <li><a href="/misc/goto?guid=4959723215759831373" rel="nofollow,noindex">【Android】Fragment懒加载和ViewPager的坑</a> ——Fragment懒加载</li>     <li><a href="/misc/goto?guid=4959723215849851477" rel="nofollow,noindex">Android开发人员不得不收集的代码(持续更新中)</a> ——Android工具类</li>     <li><a href="/misc/goto?guid=4959640208341528238" rel="nofollow,noindex">EasyRecyclerView</a> ——支持下拉上拉刷新等功能全面的RecyclerView</li>     <li><a href="/misc/goto?guid=4959723215958313226" rel="nofollow,noindex">2016Android开源项目及库汇总</a> ——开源项目及库汇总</li>    </ul>    <h2><strong>上线准备</strong></h2>    <h3><strong>1、各平台账号的申请</strong></h3>    <ul>     <li>应用市场<br> 对于个人开发者来说,Android App开发最麻烦的不是开发,而是各种应用商店的审核,广告平台的集成以及推广。由于只有一个人,所以必须所有的事情都自己做。而且对于个人来说,即便上述操作都完成了,如果应用商店不进行推荐,下载量也是迟迟起不来。毕竟不论软件好用与否,大家下载软件往往都是从下载量高到下载量低的。我的某些软件也是因为当初有应用商店与广告平台合作,会对特定广告平台的软件进行推广,而下载量暴增的。由于国家的实名制规定,很多的应用商店开始审核身份证了,需要身份证扫描件,照片等等,这个给个人开发者带来了很大的困扰。</li>     <li>登录及分享平台账号<br> 分享和登录可单独集成,也可以使用sharesdk、友盟等三方工具。分享还好,但是微信登录必须要进行认证,而且要收取年费,对于个人开发者又是一大困扰。</li>     <li>统计<br> 统计现在一般都是用友盟,没什么可说的了</li>    </ul>    <h3><strong>2、官网以及运营</strong></h3>    <p>对于个人开发者而言,官网和运营肯定是越简单越好,除非你这个项目有很好的商业模式。所以一般就自己进行一个简单的新媒体运营,这里为大家推荐这篇文章: <a href="/misc/goto?guid=4959723216038416447" rel="nofollow,noindex">新媒体运营微信编辑人员必备工具(打包免费送)</a></p>    <p>作者一般用的是: <a href="/misc/goto?guid=4959723216122237746" rel="nofollow,noindex">MAKA</a> ——一分钟上手,五分钟创作H5,超越PPT的极简操作方式!单页可以用来做官网。</p>    <h3><strong>3、代码混淆</strong></h3>    <p>为什么需要代码混淆呢?原因很简单,你的apk很容易被反编译出来,你写的代码都会被看到,因此我们需要在编译过程中对代码进行一定程度的混淆,使得别人不能反编译不出你的代码。本文因为是开源,所以没做混淆处理。下面介绍下具体混淆过程:</p>    <p>新建一个项目,Android Studio默认关闭代码混淆开关,在build.gradle文件中,如下图所示的minifyEnabled 开关,因此如果需要混淆代码,需将false改为true,然后在文件proguard-rules.pro添加具体混淆规则。</p>    <p><img src="https://simg.open-open.com/show/b501919bb18975e91a23952b889750b6.png"></p>    <pre>  <code class="language-java">-dontskipnonpubliclibraryclasses # 不忽略非公共的库类  -optimizationpasses 5            # 指定代码的压缩级别  -dontusemixedcaseclassnames      # 是否使用大小写混合  -dontpreverify                   # 混淆时是否做预校验  -verbose                         # 混淆时是否记录日志  -keepattributes *Annotation*     # 保持注解  -ignorewarning                   # 忽略警告  -dontoptimize                    # 优化不优化输入的类文件    -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        #生成日志数据,gradle build时在本项目根目录输出  -dump class_files.txt            #apk包内所有class的内部结构  -printseeds seeds.txt            #未混淆的类和成员  -printusage unused.txt           #打印未被使用的代码  -printmapping mapping.txt        #混淆前后的映射    -keep public class * extends android.support.** #如果有引用v4或者v7包,需添加  -libraryjars libs/xxx.jar        #混淆第三方jar包,其中xxx为jar包名  -keep class com.xxx.**{*;}       #不混淆某个包内的所有文件  -dontwarn com.xxx**              #忽略某个包的警告  -keepattributes Signature        #不混淆泛型  -keepnames class * implements java.io.Serializable #不混淆Serializable    -keepclassmembers class **.R$* { #不混淆资源类          public static <fields>;  }  -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 *;  }</code></pre>    <h3><strong>4、打包上传市场</strong></h3>    <p>这阶段主要注意的就是各个平台的审核标准,说实话对于个人开发者,各个平台都不是很友好,很多限制。这个就需要自己慢慢琢磨了。</p>    <p> </p>    <p>来自:http://www.jianshu.com/p/f798c8b02348</p>    <p> </p>