Google上架踩坑記錄

前言

最近的項目要在海外運營,首先要上架 Google Play,但是手上的項目是國內(nèi)的代碼,為了上架可以說是踩了不少坑,這里簡單記錄一下。

1、 升級 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īng)很明顯了,google 要求 Android 12 之后,Manifest 文件中帶有 <intent-filter> 的組件需申明 android:exported 屬性。

  • 修改后


    image.png
  • 問題是,我已經(jīng)把 Manifest 文件,所有帶 <intent-filter> 的四大組件都加上了 android:exported 屬性,還是報錯,于是 analyze 打出的 apk (Build -> Analyze Apk),查看打包之后的 Manifest 文件,這里可以看到所有注冊的組件,如果是第三方SDK注冊的組件未申明 android:exported 屬性的話,copy 一份到工程 Manifest,添加上即可(參考上圖)。
2、 Google內(nèi)購
  • Google上架,在審核代碼的時候,會要求代碼中包含
<uses-permission android:name="com.android.vending.BILLING" />

APP內(nèi)購買的權(quán)限,如何集成內(nèi)購,可以參考這個鏈接 將 Google Play 結(jié)算庫集成到您的應用中 | Google Play 結(jié)算系統(tǒng) | Android Developers

  • 這里需要注意的是,如果 App 未上架或者未審核通過,是沒辦法通過 Api 查詢到商品列表或者商品詳情的。App 至少需要面向開發(fā)者全面發(fā)布,才能正常查詢商品詳情。另外,查詢商品的 Product Id 必須和 Google 管理平臺 添加商品時的商品 ID 一致。
  • 然后在谷歌管理平臺添加開發(fā)者賬號,Google 會給開發(fā)者分配一張?zhí)摂M的測試卡,可以正常喚起支付彈窗并且允許跳過實際支付過程。
  • 在測試機上的 Google Play 登錄測試賬號,只要應用通過審核,這時候就可以調(diào)起內(nèi)購的彈窗了。
3、SSL Error Handler
image.png

在審核的時候,google 反饋了這個問題,直接看下面代碼

  webView.setWebViewClient(new WebViewClient() {

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
//                super.onReceivedSslError(view, handler, error); //一定要去掉
                // handler.cancel();// Android默認的處理方式
                handler.proceed();// 接受所有網(wǎng)站的證書
                // handleMessage(Message msg);// 進行其他處理
            }
        });

這里接受所有網(wǎng)站證書,google 認為是個安全漏洞,最簡單的辦法就是全局搜索一下這個方法,去掉,或者彈窗讓用戶選擇是否接受不安全的網(wǎng)站證書。

4、 第三方SDK
image.png

嗯…百度翻譯一波…

通過Google Play發(fā)布的應用程序不得使用Google Play更新機制以外的任何方法修改、替換或更新自身。同樣,應用程序可能不會從Google Play以外的源下載可執(zhí)行代碼(例如dex、JAR、.so文件)。此限制不適用于在虛擬機或解釋器中運行的代碼,其中提供對Android API(如Web視圖或瀏覽器中的JavaScript)的間接訪問。
在運行時加載的具有解釋語言(JavaScript、Python、Lua等)的應用程序或第三方代碼(如SDK)(如未與應用程序打包)不得允許潛在違反Google Play政策。請注意,您對應用程序的各個方面負責;通過在應用程序中使用SDK,您需要對SDK在應用程序內(nèi)的行為負責。

總之 google 不允許應用有自動更新的行為,像國內(nèi)熱修復等補丁功能,google 是嚴令禁止的,于是項目拿掉了像 bugly,友盟,百度統(tǒng)計,阿里云日志,阿里云人臉識別,百度人臉識別,等可能讀取用戶信息和自動更新的第三方SDK。

5、 Huawei Mobile Services SDK
image.png

嗯…再百度翻譯一波…

您的應用程序包含不符合設備和網(wǎng)絡濫用政策的內(nèi)容。我們發(fā)現(xiàn)您的應用程序使用的是不兼容版本的華為移動服務SDK,該SDK包含從Google Play之外的未知來源下載或安裝應用程序的代碼。
鑒于SDK的性質(zhì),請將其從提交到Play Store的應用程序版本中刪除。

這個問題可以說是非常嚴重,直接導致我們的應用封停了。也就是說之前上架的版本也會被迫下架……上面說到了,谷歌嚴令禁止代碼中存在動態(tài)更新的行為,這里說使用了不兼容的華為移動服務SDK,該SDK包含從Google Play之外的未知來源下載或安裝應用程序的代碼。筆者第一個想到的是 Huawei Maven 倉庫。

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)第三方庫

implementation 'com.llew.huawei:verifier:1.0.3'

這個庫是為了修復華為 Register too many Broadcast Receivers 的崩潰的,可能被 Google 識別為動態(tài)修復的代碼了吧。

還有一個適配桌面未讀消息的角標的庫

implementation "me.leolin:ShortcutBadger:1.1.17@aar"

從 manifest 文件看到它申請了一系列華為的權(quán)限,沒辦法先拿掉吧。

6、 不安全的加密模式
7、 不安全的解壓縮模式
e57cf69cf00f1f84089eb34eafee8c3.jpg

這里簡單說一下,Google 只是建議我們按照給的參考文檔,修改這兩個問題,但并不強制。想優(yōu)化的直接點進去 Google 幫助中心文章 參考修改就行了。

8、 登錄憑據(jù)無效或不完整

為了審核您的應用是否符合開發(fā)者計劃政策,我們需要您提供該應用的有效登錄憑據(jù)以及審核該應用所需的任何其他資源。具體問題如下:

  • 您未向我們提供訪問您的應用所需的有效演示/訪客帳號或有效用戶名和密碼。

解決:一定要記得在 Google 后臺添加測試需要的賬號密碼,具體看截圖。

image.png

Google 會登錄開發(fā)者提供的賬號密碼測試應用功能的完整性,到了這一步,基本上審核通過問題不大。到這里筆者的項目算是順利上架了,也希望這篇文章給需要上 Google Play 的打工人提供點點的幫助。加油,只要思想不滑坡,辦法總比困難多……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容