DrySister看妹子應用(第一版)——6.圖示製作,混淆,簽名打包,APK瘦身,應用釋出

coder-pig發表於2017-12-21

DrySister看妹子應用(第一版)——6.圖示製作,混淆,簽名打包,APK瘦身,應用釋出

標籤: DrySister


不要問我為什麼標題這麼長,怎麼不寫短點,我覺得你是

程式碼雖然寫完了,但是釋出的後續操作還是挺多的,如標題,
本節講述的內容依次是:應用圖示的製作混淆簽名打包APKApk瘦身
以及釋出應用到酷安市場。內容較多就不嘮叨了,直接開始~


1.圖示製作

本來想著自己用Sketch做一枚的,摸索了10分鐘不到就放棄了…
還是直接利用AS自帶的圖示生成工具一鍵生成算了,步驟如下:
右鍵drawable資料夾 -> new -> Image Asset,選擇自己喜歡
的圖片做圖示,比如我最喜歡的過氣女二蕾姆,然後Next,接著
的彈窗無腦下一步就好:

然後AS幫我們生成了一堆檔案:

    

看到這裡你可能會黑人問號???
這個mipmap-anydpi-v26資料夾是什麼鬼?
還有為什麼每個mipmap資料夾都多了ic_launcher_foregroundic_lanucher_round

原因是

Android 8.0(API 26) 引入了自適應的啟動器圖示,它可以在不同的裝置模型
中顯示各種形狀;其實就是把原本一層的圖示分成了兩個圖層:背景前景
然後不同的啟動器有Mask(譯作面具,不過感覺遮罩層更加貼切)然後,不同
的遮罩層能裁剪出不同的圖形,比如示例中的圓形:

除了這種玩法外還有支援動畫效果,比如兩層採用不一樣的滑動速度:

   

網上說Android 8.0可以長按桌面修改圖示形狀,試了下8.0的模擬器
並沒有找到相關選項;有人說是Pixel Launcher,下了好幾個版本發現
也沒有,猜測應該是親兒子Pixel系列自帶的Launcher才能修改吧。
我用Nova Launcher和8.0的啟動器對比也能看出差別:

更多內容可見官網:Adaptive Icons
知道個所以然就行,不喜歡的話可以把檔案都刪掉,只保留一個ic_launcher.png。


2.混淆

在應用釋出前,對程式碼進行混淆處理,可以讓我們的程式碼即使被
反編譯,也讓其難以閱讀。AS自身整合Java的ProGuard作為壓縮,
優化和混淆工具,混淆規則檔案是:proguard-rules.pro,啟用
混淆規則的話修改build.gradle中的minifyEnabledture即可開啟混淆。
ProGuard除了能混淆程式碼外,還可以減少應用體積,對位元組碼級別優化
讓我們的APP執行更快!另外,混淆完後會預設在app/build/outputs/mapping/release
下生成mapping.txt混淆規則檔案,可以根據這個檔案反推回混淆前的程式碼;
還有有些地方是要避免混淆的,不然APP執行的時候會出錯。

限於篇幅就不在此講解混淆的規則了,有興趣的可以移步到:
Android混淆從入門到精通
這裡就直接用網上的通用模板了,如果是第三方的話,官方文件一般
都有混淆規則的,複製貼上下即可,通用模板如下:

#指定壓縮級別
-optimizationpasses 5

#不跳過非公共的庫的類成員
-dontskipnonpubliclibraryclassmembers

#混淆時採用的演算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

#把混淆類中的方法名也混淆了
-useuniqueclassmembernames

#優化時允許訪問並修改有修飾符的類和類的成員
-allowaccessmodification

#將檔案來源重新命名為“SourceFile”字串
-renamesourcefileattribute SourceFile
#保留行號
-keepattributes SourceFile,LineNumberTable
#保持泛型
-keepattributes Signature

#保持所有實現 Serializable 介面的類成員
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

#Fragment不需要在AndroidManifest.xml中註冊,需要額外保護下
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment

# 保持測試相關的程式碼
-dontnote junit.framework.**
-dontnote junit.runner.**
-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**

然後build.gradle裡修改下,啟用混淆以及開啟壓縮:

配置完成後,命令列執行一波./gradlew build即可生成apk。
我們來對比下混淆前後的結果:

對比內容 混淆前 混淆後
APK大小
反編譯程式碼

apk體積小了,反編譯難度提高了,美滋滋!


3.簽名打包

應用簽名的重要性不言而喻,應用的唯一標誌開發者的身份憑證
這樣可以防止使用者已安裝的應用被惡意的第三方覆蓋或替換掉,這種
逆向APP後進行二次打包的對於付費App和遊戲App非常常見。

關於簽名生成打包官方文件已經有詳細敘述(可能需要梯子):
https://developer.android.com/studio/publish/app-signing.html#generate-key

簽名生成

簽名生成以後,就是使用簽名打包了,打包方式有兩種:
一種是手動打包,另一種是通過gradle構建自動打包

手動打包非常簡單,也很low:依次點選:Build -> Generate Signed APK

然後選擇哪裡存放生成的apk:

然後就可以看到生成的apk了:

另一種是gradle命令列構建的,也很簡單,圖形化的可以看官方
文件,我這裡直接貼程式碼,一般的話簽名檔案是不會丟到專案裡
的,我這裡因為是開源的,所以把my.jks也丟專案裡了,然後
修改下build.gradle,依次是簽名資訊

命令列走一波:./gradlew clean build編譯執行,編譯檢視下述
目錄app-release.apk是否生成成功:


4.APK瘦身

經過混淆簽名打包後的apk大小為1.4mb,但是作為一個沒有什麼圖片,
沒有采用第三方庫的看圖應用來說,實在是很差強人意,所以務必需
要對我們的APK瘦身一波。

Android Studio 自帶的 APK Analyzer,可以對我們的APK做一個定量分析:

看得出是res佔比最多,原因也是我們的圖示,就不去把刪圖片和資料夾了,
只是用工具對圖片進行壓縮,這裡安利個神器:ImageOptim

壓縮完再看下apk體積變成了1.3mb,此時再分析下:

感覺沒什麼太大的變化,但是apk就是減少了0.1mb,圖片
資源壓縮是apk瘦身最基本的操作。關於其他的優化套路
後面版本再細談,專案比較小,可優化的潛力很低…


5.應用釋出

不要問我為什麼是酷安市場,搞機的基佬基本都會混酷安的~
釋出我們的應用,然後填寫相關描述資訊,傳應用截圖;
接著點APK版本上傳我們的APK,這裡會對apk包名做校驗,
我之前寫錯一直沒發現,後面改了才可以;

上傳完要等檢測,檢測通過就可以提交了

釋出後就等稽核啦!

等明天管理員稽核通過後就可以在酷安上找到我們的App了!

最後把我們develop分支上的程式碼合併到master上,每次正式版本
的才合併到master,同時打上Tag,打Tag是一種良好的習慣,
等版本線長了你就能體會到這個習慣給你帶來的便利了:

git checkout master # 切換到master分支
git rebase develop  # 合併develop分支
git push origin master # 推送到遠端master分支
git tag v1.0.0  # 為當前commit打上TAG
git push origin v1.0.0 # 把TAG推送到遠端倉庫

6.小結

至此Android入門實戰的專案:DrySister的第一版已經完結了,
回顧下一路走來,我們都學習了什麼些什麼吧?

  • 1.Git的使用,遠端倉庫,分支管理的套路;
  • 2.HttpUrlConnection請求網路;
  • 3.AsyncTaskHandler的使用;
  • 4.使用自帶摳腳Json解析器解析Json
  • 5.圖片二級快取的流程;
  • 6.使用LruCacheDiskLruCache搭建了簡易圖片快取小框架;
  • 7.原生資料庫SQLite:資料庫建立,表的增刪改查,事務,分頁;
  • 8.如何編寫Log工具類,崩潰日誌採集類;
  • 9.Apk圖示的簡易製作
  • 10.Apk混淆
  • 11.Apk簽名生成,以及簽名打包的兩種方式
  • 12.Apk分析工具:APK Analyzer 和圖片壓縮神器:ImageOptim
  • 13.釋出應用到應用市場。

如果你是一路踏踏實實走來的話,完成完該專案後說明入門
系列的東西掌握了,Android你也算勉強入門了,接下來如何
真正入門,並向進階的邁進,路還遠著呢!

最後感謝各位讀者大佬一直以來的支援和陪伴,謝謝~

下一版的大綱正在規劃中,敬請期待~


程式碼下載

https://github.com/coder-pig/DrySister/tree/develop
歡迎follow,star,覺得有什麼想加進來的可以提下issues!


相關文章