天天看點

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

文章目錄

  • 前言
  • 一、版本設定
  • 二、上線模式
    • 1.上線模式的說明
    • 2.控制調制資訊
    • 3.AndroidManifest.xml的配置修改
    • 4.資料安全
    • 5.apk加強
        • 1.加強工具
        • 2.apk重簽名
  • 三、平台入駐
  • 總結

前言

本文介紹App上線前必須做的準備工作,包括正确設定版本資訊,例如設定App圖示、App名稱、App版本号;把開發模式切換到上線模式,除了代碼的切換外,還需修改AndroidManifest.xml;對關鍵業務資料進行加密處理,加密算法主要有MD5、RSA、AES、3DES、SM3等。

一、版本設定

開發一個正式App需要定制幾類版本資訊,包括但不限于App圖示、App名稱和App版本号。

(1)App圖示

App圖示檔案預設是res/mipmap-***目錄下的ic_launcher.png

修改APP圖示的方法大緻有兩種:

1.直接将想要替換的APP圖示命名為ic_launcher.png,複制粘貼到mipmap檔案夾進行覆寫式替換

2.将新的APP圖示放置于mipmap檔案夾下,并在application中進行配置檔案的資訊修改(icon屬性)

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

(2) App名稱

App名稱儲存在res/values/strings.xml的app_name中

修改APP名稱的方法也無外乎兩種:

1.修改strings的app_name對應的值

2.修改上文中application配置檔案中的label屬性

(3)App版本号

App版本号放在build.gradle的versionCode與versionName兩個參數中。versionCode必須為整型值,每次更新版本時值都要加1。versionName的字元串格式為“大版本号.中版本号.小版本号”。

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

在實際開發中,有一種做法是在APP中常量檔案中添加VersionCode&&VersionName的組合,用于檢測系統APP的更新情況,也可以在Manifest.xml檔案的application的配置屬性中檢視該屬性

Versionname的使用說明:

VersionName格式形如“數字.數字.數字”,具體規則說明如下:

(1)第一個數字為大版本号,有重要功能更新時,大版本号要加1,後面兩個數字清零;

(2)第二個數字為中版本号,每次要進行功能更新時,中版本号加1,第三個數字清零;

(3)第三個數字為小版本号,在有問題修複與界面微調時,小版本号加1。

二、上線模式

1.上線模式的說明

從保密需要考慮,App在上線前需要去掉多餘的調試資訊,形成上線模式。與之相對的是開發階段的開發模式。

建立上線模式的好處有以下3點:

(1)保護使用者的敏感賬戶資訊不被洩露。

(2)保護業務邏輯與流程處理資訊不被洩露。

(3)把異常資訊轉換為更友好的提示資訊,改善使用者體驗。

代碼如下(示例):

2.控制調制資訊

控制調試資訊的公共類主要有3種,分别對Log類、Toast類和AlertDialog類進行封裝。
  1. 日志Log

    Log類用于列印調試日志。除非特殊情況,釋出上線的App應屏蔽所有日志資訊。

  2. 提示Toast

    Toast類用于在界面下方彈出小窗提示。除了少數彈窗可予以保留(如“再按一次傳回鍵退出”),其他彈窗都應在釋出時屏蔽。

  3. 提醒對話框AlertDialog

    提醒對話框常用于各種與使用者互動的操作。

在這一階段,常見的做法是對調試資訊類,如Log進行封裝,可以設定一個布爾類型的标志位,當其值設為False的時候,一鍵使得所有Log方法無法列印調試資訊,當然這一做法要考慮到安全性問題,例如下面我進行封裝的LogUtil方法

代碼如下(示例):

import android.util.Log;

public class LogUtil {
    public static String sTAG = "LogUtil";

    //控制是否要輸出log
    public static boolean sIsRelease = false;

    /**
     * 如果是要釋出了,可以在application裡面把這裡release一下,這樣子就沒有log輸出了
     */
    public static void init(String baseTag, boolean isRelease) {
        sTAG = baseTag;
        sIsRelease = isRelease;
    }

    public static void d(String TAG, String content) {
        if (!sIsRelease) {
            Log.d("[" + sTAG + "]" + TAG, content);
        }
    }

    public static void v(String TAG, String content) {
        if (!sIsRelease) {
            Log.d("[" + sTAG + "]" + TAG, content);
        }
    }

    public static void i(String TAG, String content) {
        if (!sIsRelease) {
            Log.d("[" + sTAG + "]" + TAG, content);
        }
    }

    public static void w(String TAG, String content) {
        if (!sIsRelease) {
            Log.d("[" + sTAG + "]" + TAG, content);
        }
    }

    public static void e(String TAG, String content) {
        if (!sIsRelease) {
            Log.d("[" + sTAG + "]" + TAG, content);
        }
    }
}

           

如上,當isRelease屬性為false時候,才會進行調制資訊的列印,當為true的時候,則不會,相對應的Toast、Dialog也可同樣進行二次封裝或進行自定義View的再書寫實作該效果

3.AndroidManifest.xml的配置修改

AndroidManifest.xml也要區分開發模式與上線模式,有3點修改。

(1)application标簽中加上屬性android:debuggable="true"表示調試模式,預設false表示上線模式。在上線釋出時要把該屬性設定為false。

(2)App釋出後,沒有特殊情況,開發者都不希望activity和service對外開放。但其預設是對外部開放的,是以要在activity和service标簽下分别添加屬性android:exported= “false”,表示該元件不對外開放。

(3)App預設安裝到内部存儲,因為手機的存儲空間有限,是以應該盡量讓App選擇安裝到SD卡,避免占用寶貴的内部存儲空間。

(1)需要注意的是,在Android較新版本中,打包apk已經不需要手動進行debuggable屬性進行設定,預設情況下我們都是需要設定的,但如果打包的是debug版本的apk檔案,那麼這個debuggable屬性就自動設定為true,反之,如果打包的是release版本的apk檔案,那麼這個debuggable屬性就自動設定為false。

以下是官方文檔給出的解釋:

Avoid hardcoding the debug mode, leaving itout allows debug and release builds to automatically assign one.

It is best to leave out theandroid:debuggable attribute from the manifest. If you do, then the tools willautomatically insert android:debuggable=true when building APK to debug on anemulator or device. And when you perform a release build such as Exporting APK,it will automatically set it to false.

If on the other hand you specify a specificvalue in the manifest file, then the tools will always use it. This can lead toaccidentally publishing your app with debug information.

翻譯過來就是

避免寫死調試模式,保留itout允許調試和釋出版本自動配置設定一個。

最好在清單中省略android:debugable屬性。如果您這樣做,那麼在建構APK以便在模拟器或裝置上調試時,工具将自動插入android:debuggable=true。當您執行釋出建構(如導出APK)時,它會自動将其設定為false。

另一方面,如果您在清單檔案中指定了一個特定值,那麼工具将始終使用它。這可能導緻意外釋出帶有調試資訊的應用程式。

(2)關于Activity和Service的Exported屬性問題,涉及跳轉(Intent-filder)問題,但本文僅做APP上線前的簡單部署,因而不做深入說明

(3)關于設定預設安裝存儲位置的問題,可在AndroidManifest.xml進行屬性設定,具體如下:

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結
淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

4.資料安全

資料安全涉及的内容篇幅過多,核心便是加密,包括但不限于對SharedPreference、SQLite、傳輸資料進行加密工作處理;加密算法的内容浩如煙海,在本文就不做贅述了。

5.apk加強

1.加強工具

apk加強如果自己從頭來進行加強,涉及的安全知識篇章實在過于龐大,對于普通的應用開發者來說懂安全固然是一件好事,但是要求所有的應用開發者都對安全知識具有熟練的掌握難免不現實,這裡我們推薦使用幾個第三方apk加強平台

  • 騰訊雲的apk加強平台

    騰訊雲應用加強,可線上加強

  • 360的apk加強平台

    -360應用加強平台,需下載下傳

例:騰訊雲加強平台:

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

2.apk重簽名

平台加強後的apk需要重新進行簽名,重簽名的方法有很多很多啊,有javasigner、apksigner還有許多的可視化簽名工具,這裡我們使用javasigner工具進行簽名,需要注意的是javasigner目前隻支援V1的簽名方式,若要對apk進行V2簽名,可使用Android SDK中附帶的apksigner進行簽名。

javasigner簽名步驟:

1.重新下載下傳加強後的apk檔案,放置于指定的檔案夾下

我們這裡放置于unamed的檔案夾下

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

2.一行指令進行重簽名打包

jarsigner -verbose -keystore keystore檔案路徑 -signedjar 簽名後生成的apk路徑 待簽名的apk路徑 别名
           

例:

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

需要注意的是,javasinger指令位于java jdk目錄的bin目錄下,可以在該檔案夾下啟動指令行,當然也可設定環境變量直接啟動

然後我們便發現打包成功了

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

三、平台入駐

完成了以上準備工作之後就可以将應用釋出到相關平台啦,填寫相關資訊之後經平台稽核就可以在相關平台下載下傳自己釋出的移動應用了!

淺析Android APP上線前的準備工作前言一、版本設定二、上線模式三、平台入駐總結

總結

apk上線之前的準備工作很多,筆者這裡隻是簡略地介紹了用戶端的一些相關準備工作,希望大家都可以順利完成自己的移動應用上線工作!