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應用從建項目開始
開發
這個階段是最簡單的,詳細怎么開發作者就不闡述了。在這里作者給出本項目所用到的東西:
- CoordinatorLayout——使用CoordinatorLayout打造各種炫酷的效果
- 【Android】Fragment懶加載和ViewPager的坑 ——Fragment懶加載
- Android開發人員不得不收集的代碼(持續更新中) ——Android工具類
- EasyRecyclerView ——支持下拉上拉刷新等功能全面的RecyclerView
- 2016Android開源項目及庫匯總 ——開源項目及庫匯總
上線準備
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