1. 程式人生 > >app打包、混淆、加固和多渠道打包

app打包、混淆、加固和多渠道打包

1:打包步驟:
1:桌面建立一個資料夾,名字叫keystore
2:點選build下面的 ,如下:

這裡寫圖片描述

3:會出現如下介面:

這裡寫圖片描述

4:下一步:

這裡寫圖片描述

5:如果有keystore,請點選 choose existing,選擇以前的keystore,同時輸入密碼和專案名字,最後點選下一步,如果沒有keystore,請選擇 create new keystore,跳轉如下介面:

這裡寫圖片描述

上面的引數分別是:
keystore path:存放keystore的路徑,一般建議在桌面建立一個資料夾,放這個檔案,
password:密碼
confirm:重複輸入密碼
Alias:別名,唯一識別名(一般建議使用專案的名字)
Frist and last name:專案的名字

6:寫完以上資訊,點選ok,進入如下介面:

這裡寫圖片描述

7:點選下一步,進入下一個頁面:(如果開發工具設定了密碼,會讓輸入密碼,否則跳過這不)

這裡寫圖片描述

8:最後一步,選擇apk的存放路徑:(建議一般情況放到keystore裡面)

這裡寫圖片描述

以上就是最簡單的打包.

程式碼混淆:
其中我們打包的時候為了防止被反編譯,需要對程式碼進行混淆;首先在Android studio裡面開啟代 碼混淆的方式很簡單,預設Android studio不開啟程式碼混淆,
其中開啟程式碼混淆的欄位為:minifyEnabled,false不開啟程式碼混淆,true開啟程式碼混淆,圖如下:

這裡寫圖片描述

proguardFiles:後面兩個檔名字,第一個是代表系統幫我們做的混淆,第二個代表需要我們自己寫混淆規則.
混淆規則寫在:proguard-rules.pro或者proguard-rules.txt裡面

-optimizationpasses 5          # 指定程式碼的壓縮級別(混淆次數可以定義,但是一般混淆5次)
-dontusemixedcaseclassnames   # 是否使用大小寫混合(加上他表示使用大小寫混合)
-dontpreverify           # 混淆時是否做預校驗(表示混淆的時候會不會報錯)
-verbose                # 混淆時是否記錄日誌(加上他表示混淆的時候記錄日子)
-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    # 保持哪些類不被混淆

不能混淆的包括如下:
-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 *;
}

注意: shrinkResources 表示是否移除圖片資源 true表示移除,false 表示不移除

這裡寫圖片描述

Android studio 多渠道打包:

目的:多渠道打包的目的是什麼?
多渠道打包的目的是為了統一app在各個平臺的下載量,一般整合友盟,同時會整合友盟統計.

第一步:在註冊檔案修改一下檔案:AndroidManifest.xml中修改以下值:

    <meta-data android:name="UMENG_CHANNEL"    android:value="wandoujia" />

修改為:
先你必須在AndroidManifest.xml中的meta-data修改以下的樣子:

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="${UMENG_CHANNEL_VALUE}" />

其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定義配置的值
build.gradle檔案就利用productFlavors這樣寫:

productFlavors {

wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}

baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}

c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}

uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
}

其中[UMENG_CHANNEL_VALUE: “wandoujia”]就是對應${UMENG_CHANNEL_VALUE}的值。

最新更新
後來發現上面的重複程式碼太多,就在網上又發現了一個更簡潔的寫法

productFlavors {

wandoujia {}
baidu {}
c360 {}
uc {}

productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}

}

其中name的值對相對應各個productFlavors的選項值,這樣就達到自動替換渠道值的目的了。
這樣生成apk時,選擇相應的Flavors來生成指定渠道的包就可以了,而且生成的apk會自動幫你加上相應渠道的字尾,非常方便和直觀。

釋出步驟:
一般情況下發布平臺包括360,豌豆莢,91助手,應用寶,騰訊手機助手
首先以360為例:
第一步:首先需要打包apk,接下來交給測試區測試.當測試測試的沒有BUG,我們就可以拿著apk去上線.
第二步:開啟360開發者中心,(http://opengame.360.cn),選擇移動平臺接入,如下:

這裡寫圖片描述

這裡寫圖片描述

第四步:選擇軟體釋出,如果沒有登陸,會跳轉到登陸頁面,進行登陸,或者註冊,登陸成功以後進入如下介面,點選軟體按鈕:

這裡寫圖片描述

第五步:點選軟體按鈕,進入app釋出頁面:
(1):上傳apk
(2):上傳版權證明
(3):選擇語言
(4):選擇資費型別
(5):應用簡介
(6):上傳圖示
(7):提交稽核,立即釋出.

注意:上傳apk的時候需要進行加固,加固完以後需要進行重新簽名,簽名步驟如下:
第一步:首先從360下載到apk
第二部:將apk與keystore.jsk 放到同一個資料夾下面
第三部:啟動終端命令列,cd進去到當前資料夾:
輸入如下格式:

arsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 【你的簽名檔案】 【代簽名的apk】 【你的alias】 -storepass 【你的密碼】
程式碼如下:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keystore.jks app-release.apk TestApk -storepass 123456

注意:【你的簽名檔案】必須帶字尾,否則會報簽名失敗的錯誤.
【代簽名的apk】 使用帶字尾的全部名字
【你的alias】 打包時候指定的,一把使用專案名字
【你的密碼】 就是密碼

相關推薦

app打包混淆加固多渠道打包

1:打包步驟: 1:桌面建立一個資料夾,名字叫keystore 2:點選build下面的 ,如下: 3:會出現如下介面: 4:下一步: 5:如果有keystore,請點選 choose existing,選擇以前的keystore,

騰訊樂固的加固多渠道打包客戶端配置

1、概述 近日專案新版本上線,各大市場都正常,但是騰訊的應用寶稽核提示需要用樂固加固,因為之前一直用360加固並進行多渠道打包,但是提示如果不用樂固可能會稽核不通過,不給曝光率啥的,所以單

Apk瘦身混淆加固

一、 apk的組成元素: resources.arsc:編譯後的佈局檔案 assets:目錄存放一些配置檔案 lib:下的子目錄armeabi存放一些so檔案或者jar包 META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統的安全 res:apk

關於HTMLjs加密混淆原始碼保護程式碼安全,防止解壓直接看原始碼

關於HTML、js加密、混淆、原始碼保護、程式碼安全,防止解壓直接看原始碼 我們先理下需求,加密的目的是什麼?加密到什麼級別?為此我們可以犧牲什麼? 我們知道這個世界不存在絕對的安全,加密會被破解、混淆會被反混淆。 技術小白、開發者、黑客,是完全不同的級別,防範不同級別的人策略都不一樣。

Python實現Android Apk 加固多渠道打包

前言 道高一尺,魔高一丈。現如今只做混淆的apk,在smali逆向中,可以說是裸奔。鑑於此,各大佬也都針對自己的應用進行了加固處理(加固原理自找度娘),與此同時,市面上各主流平臺也都開源推出了自己的應用加固工具,比如360加固助手。 我們海豚睡眠就是採用36

SoCompressor-JS與CSS本地批量壓縮混淆美化格式化GUI工具.

前一段時間在寫web時自己寫了幾個JS檔案用於前後臺展示與互動,在後來要壓縮js時發現基本都是帶命令列的壓縮工具,而且不能批量處理,線上壓縮壓縮完畢之後得一個個下,最可悲的是還需要自己重新命名檔案並且選擇下載位置,太麻煩了。後來再網上搜了一下,發現這類GUI工具確定比較少,

Tinker的整合多渠道打包

Tinker是什麼 Tinker是微信官方的Android熱補丁解決方案,它支援動態下發程式碼、So庫以及資源,讓應用能夠在不需要重新安裝的情況下實現更新。當然,你也可以使用Tinker來更新你的外掛。 它主要包括以下幾個部分: 1.gradle編譯外掛: tinke

Android studio 多環境打包多渠道打包

1.多環境打包 在android開發中經常遇到要打不同環境的包,所謂不同環境就是介面連線的伺服器域名不同,如開發環境為devIP,測試環境為buildIP,uat環境為uatIP,release環境為releaseIP 。以前的做法是同過一個static變

借騰訊開源 VasDolly,談談 Android 簽名多渠道打包的原理!

一、前言 Hi,大家好,我是承香墨影! 當我們需要釋出一款 App 到應用市場的時候,一般需要我們針對不同的市場生產不同的渠道包,它們使用的是同一套程式碼,只是會包含一些各自的渠道資訊,用於我們做資料分析。 前幾天,企鵝電競團隊開源了自己的 And

as中apk簽名多渠道打包

1.什麼是簽名: 數字簽名就是為你的程式打上一種標記,來作為你自己的標識,當別人看到簽名的時候會知道它是與你相關的 2.為什麼要簽名 防止盜版,app市場可以檢測簽名未簽名的apk無法安裝,也沒法釋出到應用市場包名相同,簽名不同的apk無法升級覆蓋 3.怎麼簽名 bu

Spring Cloud基於Docker進行打包部署1-環境配置docker打包執行

1、使用linux虛擬機器離線安裝docker(2)將安裝包拷貝到本地linux虛擬機器中,使用dpkg -i xxx.deb命令安裝。這裡有個問題,docker有一些依賴包,需要一併安裝:下載依賴deb。網址:https://pkgs.org/搜尋:libltdl7搜尋:l

gradle打包android (實現外部導入簽名文件多渠道打包導入ant腳本)

gradle打包 tree clu download csdn ssp pes 基礎 net 近期一直在做android自己主動打包,之前已經完畢了用純命令行的形式打包、原生態ant腳本打包。和基於android的SDK的打包。而且實現了多渠道打包,後來同

框架基礎:ajax設計方案(六)--- 全局配置請求格式拓展優化請求二進制類型瀏覽器錯誤搜集以及npm打包發布

rri seve win 最大 regexp isempty lee 出現問題 hub 距離上一次博客大概好多好多時間了,感覺再不搞點東西出來,感覺就廢了的感覺。這段時間回老家學習駕照,修養,然後7月底來上海求職(面了4家,拿了3家office),然後入職同程旅遊,項目趕進

Linux文件壓縮打包(gzipbip2xz工具)

linux常見壓縮格式Windows:.rar、.zip、.7zLinux :.zip、.gz、.bz2、.xz、.tar、.gz、.tar.bz2、.tar.xzgzip壓縮工具用來壓縮文件(常用)gzip 1.txt 壓縮 1.txt g

用命令方式啟動停止appium服務app

conf from 改名 設備 nor 啟動命令 服務啟動 logger man 啟動appium服務並監聽一個端口命令: 命令command==>  appium -a {ip} -p {port} -U {deviceName} -g {log} 以shell命令

js壓縮混淆加密

頁面加載速度 lac 加載速度 註意 出錯 his cnblogs while char 最近看到有些論壇在討論js壓縮、混淆和加密的問題,特意找了些資料看了下,現在總結一下: 1.關於三者的定義與區別 壓縮:刪除 Javascript 代碼中所有註釋、跳格符號、換行符號

jaraarsdk打包以及app module生成 Library Module

jar、aar、sdk打包以及app module生成 Library Module module打包成jar: 1 將要打成jar包的 module 設定為 android-library模式 2 在主module中 用compile project(‘:要打成jar包的 m

pyinstaller打包程式時遇到的一系列問題:AttributeErrorNo module namedPyQt5

   HelloDarry 關注 2018.09.06 23:47* 字數 813 閱讀 911評論 2喜歡 3 一、背景介紹     公司使用的python環境是Anconda+Python3.6,64位系統。

[Xcode10 實際操作]九實用進階-(8)實現App的Setting設定:新增讀取程式的配置資訊

本文將演示如何實現新增和讀取程式的配置資訊。 在專案資料夾【DemoApp】上點選滑鼠右鍵->【New File】建立一個設定束檔案 ->【Settings Bundle】設定束: 如果想要通過裝置的【設定】程式,來展示自定義的的偏好設定,必須先準備好一個設定束 ->【Next】-&

pyinstaller打包exe問題:AttributeErrorsetuptoolsDLLPyQt5

之前寫的一個Python程式,打包為 .exe 完全正常,這次卻報錯。還不知道如何將.py檔案轉為.exe檔案的可以檢視: 將Python程式(.py)轉換為Windows可執行檔案(.exe) 一、背景介紹     公司使用的python環境是Anconda+P