Android項目從零到上線的全過程

nengdu1 8年前發布 | 30K 次閱讀 安卓開發 Android開發 移動開發

寫在最前面

個人開發者的開發Android的熱潮已過,目前實在不太適合個人開發者的生存。但是沒事的時候運用新技術寫點小軟件,開源出來跟大家一起學習,一起營造一個好的開發環境。

軟件立項及方向選擇

因為自己的一個想法開始做這個項目,或者在實際開發中由產品經理立項。由于本人不會后端,所以選擇的是三方開源API。

百度apistore ——里面有很多可以用的API接口,有付費的也有免費的。

你也可以直接用 Bmob后端云 ——一個強勁的后端,免去所有服務器端編碼工作量

本軟件包含兩大模塊

  • 美拍視頻 Api 取自 美拍Api

美拍視頻

  • 知乎日報 Api 取自 ZhihuDailyPurify

2.jpg

原型設計

墨刀 ——免費的移動應用原型與線框圖工具

人人都是產品經理 ——產品經理、產品愛好者學習交流平臺

UI設計

UI設計大家都知道PS或者coreldraw,當然作者只會切圖。本項目全部運用Android material design設計風格

官方Material Design詳細介紹文檔: http://www.google.com/design/spec/material-design/introduction.html

框架的搭建

現在的MVP模式越來越流行。所以框架主體選用了MVP+RxJava+Retrofit+okhttp3

具體可查看: 一個優秀的Android應用從建項目開始

開發

這個階段是最簡單的,詳細怎么開發作者就不闡述了。在這里作者給出本項目所用到的東西:

上線準備

1、各平臺賬號的申請

  • 應用市場
    對于個人開發者來說,Android App開發最麻煩的不是開發,而是各種應用商店的審核,廣告平臺的集成以及推廣。由于只有一個人,所以必須所有的事情都自己做。而且對于個人來說,即便上述操作都完成了,如果應用商店不進行推薦,下載量也是遲遲起不來。畢竟不論軟件好用與否,大家下載軟件往往都是從下載量高到下載量低的。我的某些軟件也是因為當初有應用商店與廣告平臺合作,會對特定廣告平臺的軟件進行推廣,而下載量暴增的。由于國家的實名制規定,很多的應用商店開始審核身份證了,需要身份證掃描件,照片等等,這個給個人開發者帶來了很大的困擾。
  • 登錄及分享平臺賬號
    分享和登錄可單獨集成,也可以使用sharesdk、友盟等三方工具。分享還好,但是微信登錄必須要進行認證,而且要收取年費,對于個人開發者又是一大困擾。
  • 統計
    統計現在一般都是用友盟,沒什么可說的了

2、官網以及運營

對于個人開發者而言,官網和運營肯定是越簡單越好,除非你這個項目有很好的商業模式。所以一般就自己進行一個簡單的新媒體運營,這里為大家推薦這篇文章: 新媒體運營微信編輯人員必備工具(打包免費送)

作者一般用的是: MAKA ——一分鐘上手,五分鐘創作H5,超越PPT的極簡操作方式!單頁可以用來做官網。

3、代碼混淆

為什么需要代碼混淆呢?原因很簡單,你的apk很容易被反編譯出來,你寫的代碼都會被看到,因此我們需要在編譯過程中對代碼進行一定程度的混淆,使得別人不能反編譯不出你的代碼。本文因為是開源,所以沒做混淆處理。下面介紹下具體混淆過程:

新建一個項目,Android Studio默認關閉代碼混淆開關,在build.gradle文件中,如下圖所示的minifyEnabled 開關,因此如果需要混淆代碼,需將false改為true,然后在文件proguard-rules.pro添加具體混淆規則。

-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>

4、打包上傳市場

這階段主要注意的就是各個平臺的審核標準,說實話對于個人開發者,各個平臺都不是很友好,很多限制。這個就需要自己慢慢琢磨了。

 

來自:http://www.jianshu.com/p/f798c8b02348

 

 本文由用戶 nengdu1 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!