前言
最近的項(xiàng)目要在海外運(yùn)營(yíng)沪编,首先要上架 Google Play,但是手上的項(xiàng)目是國(guó)內(nèi)的代碼年扩,為了上架可以說(shuō)是踩了不少坑蚁廓,這里簡(jiǎn)單記錄一下。
1厨幻、 升級(jí) targetSdkVersion 31
Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit value for android:exported
when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.
升級(jí)完之后就報(bào)了這個(gè)錯(cuò)誤相嵌,其實(shí)提示已經(jīng)很明顯了腿时,google 要求 Android 12 之后,Manifest 文件中帶有 <intent-filter> 的組件需申明 android:exported 屬性饭宾。
-
修改后
- 問(wèn)題是批糟,我已經(jīng)把 Manifest 文件,所有帶 <intent-filter> 的四大組件都加上了 android:exported 屬性看铆,還是報(bào)錯(cuò)徽鼎,于是 analyze 打出的 apk (Build -> Analyze Apk),查看打包之后的 Manifest 文件弹惦,這里可以看到所有注冊(cè)的組件否淤,如果是第三方SDK注冊(cè)的組件未申明 android:exported 屬性的話(huà),copy 一份到工程 Manifest肤频,添加上即可(參考上圖)叹括。
2、 Google內(nèi)購(gòu)
- Google上架宵荒,在審核代碼的時(shí)候汁雷,會(huì)要求代碼中包含
<uses-permission android:name="com.android.vending.BILLING" />
APP內(nèi)購(gòu)買(mǎi)的權(quán)限,如何集成內(nèi)購(gòu)报咳,可以參考這個(gè)鏈接 將 Google Play 結(jié)算庫(kù)集成到您的應(yīng)用中 | Google Play 結(jié)算系統(tǒng) | Android Developers
- 這里需要注意的是侠讯,如果 App 未上架或者未審核通過(guò),是沒(méi)辦法通過(guò) Api 查詢(xún)到商品列表或者商品詳情的暑刃。App 至少需要面向開(kāi)發(fā)者全面發(fā)布厢漩,才能正常查詢(xún)商品詳情。另外岩臣,查詢(xún)商品的 Product Id 必須和 Google 管理平臺(tái) 添加商品時(shí)的商品 ID 一致溜嗜。
- 然后在谷歌管理平臺(tái)添加開(kāi)發(fā)者賬號(hào),Google 會(huì)給開(kāi)發(fā)者分配一張?zhí)摂M的測(cè)試卡架谎,可以正常喚起支付彈窗并且允許跳過(guò)實(shí)際支付過(guò)程炸宵。
- 在測(cè)試機(jī)上的 Google Play 登錄測(cè)試賬號(hào),只要應(yīng)用通過(guò)審核谷扣,這時(shí)候就可以調(diào)起內(nèi)購(gòu)的彈窗了土全。
3、SSL Error Handler
在審核的時(shí)候会涎,google 反饋了這個(gè)問(wèn)題裹匙,直接看下面代碼
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// super.onReceivedSslError(view, handler, error); //一定要去掉
// handler.cancel();// Android默認(rèn)的處理方式
handler.proceed();// 接受所有網(wǎng)站的證書(shū)
// handleMessage(Message msg);// 進(jìn)行其他處理
}
});
這里接受所有網(wǎng)站證書(shū),google 認(rèn)為是個(gè)安全漏洞末秃,最簡(jiǎn)單的辦法就是全局搜索一下這個(gè)方法概页,去掉,或者彈窗讓用戶(hù)選擇是否接受不安全的網(wǎng)站證書(shū)蛔溃。
4绰沥、 第三方SDK
嗯…百度翻譯一波…
通過(guò)Google Play發(fā)布的應(yīng)用程序不得使用Google Play更新機(jī)制以外的任何方法修改篱蝇、替換或更新自身。同樣徽曲,應(yīng)用程序可能不會(huì)從Google Play以外的源下載可執(zhí)行代碼(例如dex零截、JAR、.so文件)秃臣。此限制不適用于在虛擬機(jī)或解釋器中運(yùn)行的代碼涧衙,其中提供對(duì)Android API(如Web視圖或?yàn)g覽器中的JavaScript)的間接訪(fǎng)問(wèn)。
在運(yùn)行時(shí)加載的具有解釋語(yǔ)言(JavaScript奥此、Python弧哎、Lua等)的應(yīng)用程序或第三方代碼(如SDK)(如未與應(yīng)用程序打包)不得允許潛在違反Google Play政策。請(qǐng)注意稚虎,您對(duì)應(yīng)用程序的各個(gè)方面負(fù)責(zé)撤嫩;通過(guò)在應(yīng)用程序中使用SDK,您需要對(duì)SDK在應(yīng)用程序內(nèi)的行為負(fù)責(zé)蠢终。
總之 google 不允許應(yīng)用有自動(dòng)更新的行為序攘,像國(guó)內(nèi)熱修復(fù)等補(bǔ)丁功能,google 是嚴(yán)令禁止的寻拂,于是項(xiàng)目拿掉了像 bugly程奠,友盟,百度統(tǒng)計(jì)祭钉,阿里云日志瞄沙,阿里云人臉識(shí)別,百度人臉識(shí)別慌核,等可能讀取用戶(hù)信息和自動(dòng)更新的第三方SDK距境。
5、 Huawei Mobile Services SDK
嗯…再百度翻譯一波…
您的應(yīng)用程序包含不符合設(shè)備和網(wǎng)絡(luò)濫用政策的內(nèi)容垮卓。我們發(fā)現(xiàn)您的應(yīng)用程序使用的是不兼容版本的華為移動(dòng)服務(wù)SDK肮疗,該SDK包含從Google Play之外的未知來(lái)源下載或安裝應(yīng)用程序的代碼。
鑒于SDK的性質(zhì)扒接,請(qǐng)將其從提交到Play Store的應(yīng)用程序版本中刪除。
這個(gè)問(wèn)題可以說(shuō)是非常嚴(yán)重们衙,直接導(dǎo)致我們的應(yīng)用封停了钾怔。也就是說(shuō)之前上架的版本也會(huì)被迫下架……上面說(shuō)到了,谷歌嚴(yán)令禁止代碼中存在動(dòng)態(tài)更新的行為蒙挑,這里說(shuō)使用了不兼容的華為移動(dòng)服務(wù)SDK宗侦,該SDK包含從Google Play之外的未知來(lái)源下載或安裝應(yīng)用程序的代碼。筆者第一個(gè)想到的是 Huawei Maven 倉(cāng)庫(kù)忆蚀。
maven { url 'http://developer.huawei.com/repo/'}
其次矾利,筆者還拿掉了跟華為相關(guān)的推送SDK(順手拿掉了魅族姑裂,小米,OPPO男旗,VIVO舶斧,相關(guān)推送的 SDK)
implementation 'com.huawei.hms:push:6.3.0.302'
Huawei 相關(guān)第三方庫(kù)
implementation 'com.llew.huawei:verifier:1.0.3'
這個(gè)庫(kù)是為了修復(fù)華為 Register too many Broadcast Receivers 的崩潰的,可能被 Google 識(shí)別為動(dòng)態(tài)修復(fù)的代碼了吧察皇。
還有一個(gè)適配桌面未讀消息的角標(biāo)的庫(kù)
implementation "me.leolin:ShortcutBadger:1.1.17@aar"
從 manifest 文件看到它申請(qǐng)了一系列華為的權(quán)限茴厉,沒(méi)辦法先拿掉吧。
6什荣、 不安全的加密模式
7矾缓、 不安全的解壓縮模式
這里簡(jiǎn)單說(shuō)一下,Google 只是建議我們按照給的參考文檔稻爬,修改這兩個(gè)問(wèn)題嗜闻,但并不強(qiáng)制。想優(yōu)化的直接點(diǎn)進(jìn)去 Google 幫助中心文章 參考修改就行了桅锄。
8琉雳、 登錄憑據(jù)無(wú)效或不完整
為了審核您的應(yīng)用是否符合開(kāi)發(fā)者計(jì)劃政策,我們需要您提供該應(yīng)用的有效登錄憑據(jù)以及審核該應(yīng)用所需的任何其他資源竞滓。具體問(wèn)題如下:
- 您未向我們提供訪(fǎng)問(wèn)您的應(yīng)用所需的有效演示/訪(fǎng)客帳號(hào)或有效用戶(hù)名和密碼咐吼。
解決:一定要記得在 Google 后臺(tái)添加測(cè)試需要的賬號(hào)密碼,具體看截圖商佑。
Google 會(huì)登錄開(kāi)發(fā)者提供的賬號(hào)密碼測(cè)試應(yīng)用功能的完整性锯茄,到了這一步,基本上審核通過(guò)問(wèn)題不大茶没。到這里筆者的項(xiàng)目算是順利上架了肌幽,也希望這篇文章給需要上 Google Play 的打工人提供點(diǎn)點(diǎn)的幫助。加油抓半,只要思想不滑坡喂急,辦法總比困難多……