本篇文章為本人第一次上傳Google Play的工作總結(jié),可能文章過于基礎(chǔ),大佬勿噴,本文全部命令環(huán)境皆為 Windows。預(yù)計閱讀時間:10分鐘
update time : 2021年01月22日11:37:21
jks簽名問題
本地通過 gradlew resguardxxxRelease (自定義 resguardTask打包)生成正式版Apk,提交Google play 提示密鑰時間即將到期。(心里納悶了 怎么會快到期了呢?)我們 通過 keytool 命令獲取 jks 中詳細(xì)信息:
確定 JDK bin文件夾下 有沒有Keytool 。(如果沒有運(yùn)行 jarsigner.exe 文件,生成),然后使用
keytool -list -v -keystore xxx.jks
生成簽名的時,可以指定一個有效時間,這個時間默認(rèn)為 25 年,并且 Google Play 也有硬性規(guī)定,上架的 App 簽名有效期必須在 2033-10-22 日期之后(一臉懵逼,其實就算25年也不行)。如果一直提示密鑰時間即將到期,可以嘗試將有效時間修改的更長甚至為1000年
代碼問題
缺少64位CPU so包問題
在 Google Play 上發(fā)布的應(yīng)用必現(xiàn)支持 64 位架構(gòu),這個意味著上架的應(yīng)用要包含多份架構(gòu)的 SO 包,
如果只有 'armeabi',是不行的。為支持 64 位,增加 ,'arm64-v8a' 架構(gòu)。
通過命令行 adb shell getprop ro.product.cpu.abi
根據(jù)返回值 可以看到手機(jī)默認(rèn)的so 文件夾。arm64-v8a 是64位的。另外,一般手機(jī)內(nèi)存超過4G 都是64位的,因為32支持的最大內(nèi)存是4G.
歷史VersionCode 問題
如果存在歷史提交app bundle記錄,需要更新 app version_code 序號,一般自動加一。
2020年4月12日 左右 ,對app 要求版本 target_sdk = 28左右
SSL Handler Err 警告
項目中使用 WebViewClient 對onReceivedSslError()方法回調(diào) ,不能使用mHandler.proceed() 直接同意,需要給用戶提示,讓用戶手動同意認(rèn)可證書。
代碼塊示例 :
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
final SslErrorHandler mHandler = handler;
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setMessage(view.getContext().getString(R.string.SSL_err));
builder.setPositiveButton(view.getContext().getString(R.string.SSL_next), (dialog, which) -> mHandler.proceed());
builder.setNegativeButton(view.getContext().getString(R.string.cancel), (dialog, which) -> mHandler.cancel());
builder.setOnKeyListener((dialog, keyCode, event) -> {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
mHandler.cancel();
dialog.dismiss();
return true;
}
return false;
});
AlertDialog dialog = builder.create();
dialog.show();
}
上架后測試問題
這里首先說一下 App bundle
Google 官方推出 App Bundle 已經(jīng)有一段時間了,簡單了解后明白它算是一個比較成熟的官方動態(tài)化組件技術(shù),不過對于在國內(nèi)上線的應(yīng)用來說,基本感受不到這個技術(shù)帶來的便利。再加上2019年底 Google 部分條件限制,現(xiàn)在提交正式版本 必須提交 App bundle 版本,簡單總結(jié)bundle:將所有情況下的資源全部提交到應(yīng)用市場上,下載時通過動態(tài)判斷安裝符合用戶手機(jī)的資源包、語言包和abi包。
so 文件問題
上架下載APP 發(fā)現(xiàn)登錄一直進(jìn)不去,報錯提示網(wǎng)絡(luò)請求 Put Body為空,(這里牽扯 ndk 請求字段加密和解密的問題)最開始以為 so 包是因為 bundle 動態(tài)打包的原因沒有將so打進(jìn)去,驗證問題:
下載 bundletool.jar
使用命令反編譯aab包
java -jar bundletool-all.jar build-apks --bundle= %YMCapp.aab% --output=%YMCapp.apks% --ks=%YMC.jks% --ks-pass=pass:%kspass% --ks-key-alias=%alias% --key-pass=pass:%keypass%
%YMCapp.aab% : aab文件,app bundle文件
%YMCapp.apks% : 輸出apks (本質(zhì)是zip ,修改后綴解壓)
%YMC.jks% : jks文件
%kspass% :key store 密碼
%alias% : 別名
%keypass% :key 密碼
命令行中需要替換的 最好都用絕對路徑
默認(rèn) bundle 生成的 aab包中,分為Base Apks 和 Split apks ,針對不同分辨率、cpu架構(gòu)和語言都有不同的apk可供安裝,Split apk中則針對 lib 和 MATH文件進(jìn)行了區(qū)分(后期總結(jié)暫時沒有圖片,最好自己打包aab體會)
發(fā)現(xiàn)沒有問題,認(rèn)為是分包的問題,默認(rèn)關(guān)閉aab 智能分包
bundle {
density {
enableSplit = false // 樣式 尺寸文件
}
language {
enableSplit = false // 語言文件
}
abi {
enableSplit = false // abi so文件
}
}
經(jīng)過后期反編譯apk,發(fā)現(xiàn)so包都有打入apk,那就不應(yīng)該了!整個人都是蒙蔽的
轉(zhuǎn)機(jī)
有位同事 告訴我不會是產(chǎn)品 默認(rèn)勾選了 google signing吧?我整個人瞬間醒了
Google play默認(rèn)簽名
來到Google play console后臺,發(fā)現(xiàn)Google 是默認(rèn)不可關(guān)閉 signing 簽名配置的。從Google上下載的應(yīng)用重新簽名打包,這個時候?qū)е掠谀愕膽?yīng)用簽名證書 MD5,SHA1,SHA-256統(tǒng)統(tǒng)發(fā)生了改變,所以凡是使用到這些配置的第三方都受到了影響。(此時內(nèi)心萬馬奔騰)由于本人參與的項目 ,與服務(wù)器通信的所有信息都是通過so 加密的,so文件又對app簽名進(jìn)行了校驗,簽名改變,so加密不通過返回空字符串,最終導(dǎo)致了 put body 的數(shù)據(jù) 都是空的后果。

你的應(yīng)用加入了簽名計劃,前面第一個是googlePlay給你的新簽名,右上角可以下載簽名證書,后面的是你上傳應(yīng)用的簽名證書。有了簽名證書,
理論上 第一種方案:我們可以打兩套包,專門為GooglePlay打一個渠道。
第二種方案 :替換GooglePlay 簽名文件
這里著重實現(xiàn)第二種方案,

下載pepk后 按照官網(wǎng)提示
java -jar %pepk.jar% --keystore=%YMCapp.jks% --alias=%alias% --output=%output.zip% --encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a --signing-keystore=%YMCapp.jks% --signing-key-alias=%alias%
%pepk.jar% : pepk 工具地址
%YMCapp.jks%:jks 文件
%alias% :別名
%output.zip% : 輸出文件(將該文件提交到GooglePlay中)
命令行中需要替換的 最好都用絕對路徑
替換好后,最好重新上傳一個包,包簽名才能生效。
遛了 ....
接入Google Analytics
google Analytics 接入?yún)⒖疾┛?/a>
關(guān)于Google Play商店不允許使用TBS SDK的問題
為了減少您的apk包大小增量,及時動態(tài)發(fā)版解決安全隱患,TBS SDK采用了后臺動態(tài)下發(fā)內(nèi)核的方案。由于Google Play 禁止任何二進(jìn)制代碼的下發(fā)(包括so、dex、jar)和插件化技術(shù)的使用,如果您有多渠道打包能力,您可以在海外版本接入僅保留接口的SDK,保證編譯通過,僅使用系統(tǒng)webview,下載地址,在其他渠道使用標(biāo)準(zhǔn)SDK版本以便正常使用X5能力