DrySister看妹子應用(第一版)——6.圖示製作,混淆,簽名打包,APK瘦身,應用釋出
DrySister看妹子應用(第一版)——6.圖示製作,混淆,簽名打包,APK瘦身,應用釋出
標籤: DrySister
不要問我為什麼標題這麼長,怎麼不寫短點,我覺得你是
程式碼雖然寫完了,但是釋出的後續操作還是挺多的,如標題,
本節講述的內容依次是:應用圖示的製作,混淆,簽名打包APK,Apk瘦身,
以及釋出應用到酷安市場。內容較多就不嘮叨了,直接開始~
1.圖示製作
本來想著自己用Sketch做一枚的,摸索了10分鐘不到就放棄了…
還是直接利用AS自帶的圖示生成工具一鍵生成算了,步驟如下:
右鍵drawable資料夾 -> new -> Image Asset,選擇自己喜歡
的圖片做圖示,比如我最喜歡的過氣女二蕾姆,然後Next,接著
的彈窗無腦下一步就好:
然後AS幫我們生成了一堆檔案:
看到這裡你可能會黑人問號???
這個mipmap-anydpi-v26資料夾是什麼鬼?
還有為什麼每個mipmap資料夾都多了ic_launcher_foreground 和 ic_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中的minifyEnabled為ture即可開啟混淆。
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.AsyncTask,Handler的使用;
- 4.使用自帶摳腳Json解析器解析Json;
- 5.圖片二級快取的流程;
- 6.使用LruCache和DiskLruCache搭建了簡易圖片快取小框架;
- 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!
相關文章
- DrySister看妹子應用(第一版)——5.程式碼回顧,調整與日誌類編寫
- DrySister看妹子應用(第二版)——1.新版Material Design主介面搭建Material Design
- 應用系統打包釋出
- Microsoft Store 桌面應用釋出流程(一)之打包應用ROS
- 簽名打包Android版apkAndroidAPK
- iOS應用簽名(上)iOS
- iOS應用簽名(下)iOS
- Android 應用簽名Android
- iOS逆向——應用簽名及重簽名原理iOS
- iOS逆向 - 應用簽名原理及重簽名 (重籤微信應用實戰)iOS
- [譯] 為你的 React 應用製作 SVG 圖示庫ReactSVG
- AndroidStudio製作歡迎介面與應用圖示Android
- Android應用重簽名Android
- Apk瘦身實用總結APK
- Android應用瘦身Android
- 用CSS來製作圖示CSS
- Android 多包名打包應用Android
- iOS逆向 應用重簽名+微信重簽名實戰iOS
- Authenticode簽名對未簽名程式碼的應用
- React Native釋出APP之打包iOS應用React NativeAPPiOS
- eclipse,android studio 簽名打包,獲取MD5, SHA1(應用的簽名)EclipseAndroid
- Android 生成簽名apk與多渠道打包AndroidAPK
- 簽名apkAPK
- IOS 逆向開發(三)應用簽名iOS
- 數字簽名的原理和應用
- uniapp打包apk安裝,應用版本號衝突,根據已有apk檔案獲取應用版本號APPAPK
- Flutter Distributor 用於打包和釋出 Flutter 應用的完整工具Flutter
- Android探索之旅 | 用ADB獲取應用APK名AndroidAPK
- Android動態修改應用圖示和名稱Android
- 為什麼要給應用程式簽名?
- 字型圖示的應用
- 程式碼簽名證書能給哪些應用程式進行簽名
- 公司只提供簽名服務,不提供證書檔案,如何打包Electron應用
- Android專案如何進行簽名打包釋出Android
- iOS應用釋出操作手冊-應用釋出篇iOS
- 「Kafka應用」名詞概念解釋Kafka
- APK簽名報錯APK
- 鴻蒙簽名釋出鴻蒙