安卓開發 做商城類APP遇到的一些坑
一、安卓8.0以上,通知要做 通知渠道(NotificationChannel),不做的話收不到任何通知。
解決方案:要麼更改 targetSdkVersion 到26以下,要麼做通知渠道分類。搜一下安卓8.0通知適配,會有很多方案程式碼。
二、網路請求錯誤的提示:error:CLEARTEXT communication to host(主機名) not permitted by network security policy
原因:由於 Android P 限制了明文流量的網路請求,非加密的流量請求都會被系統禁止掉。
解決方案:在res下新建一個xml目錄 建立名為network_security_config.xml 檔案 ,該檔案內容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然後在 AndroidManifest.xml application 標籤內應用上面的xml配置:
android:networkSecurityConfig="@xml/network_security_config"
此問題解決。
3.阿里百川 電商SDK Adnroid P版本下閃退
報錯資訊如下(我剛處理完,複製的百川論壇的一個兄弟的報錯資訊,跟我遇到的一模一樣。):
10-21 13:52:42.446 17244-17440/com.amkj.dmsh E/Tinker.TinkerUncaughtExceptionHandler: uncaughtException:Failed resolution of: Lorg/apache/http/entity/ByteArrayEntity; 10-21 13:52:42.447 17244-17440/com.amkj.dmsh E/Tinker.UncaughtHandler: TinkerUncaughtHandler catch exception:java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/entity/ByteArrayEntity; at com.taobao.wireless.security.adapter.common.c.a(Unknown Source:9) at com.taobao.wireless.security.adapter.datareport.DataReportJniBridge.sendReportBridge(Unknown Source:23) Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.entity.ByteArrayEntity" on path: DexPathList[[zip file "/data/user/0/com.amkj.dmsh/app_SGLib/libsgmain_312768000000.zip"],nativeLibraryDirectories=[/data/app/com.amkj.dmsh-Tro5E9BIyEj-fC9syfsbbA==/lib/x86, /data/user/0/com.amkj.dmsh/app_SGLib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.taobao.wireless.security.adapter.common.c.a(Unknown Source:9) at com.taobao.wireless.security.adapter.datareport.DataReportJniBridge.sendReportBridge(Unknown Source:23)
公司做的有另一個集成了百川的APP,但是我安裝他的APP沒有閃退。拿到他的程式碼,對比了一下sdk的依賴。發現他沒有用到百川提供的安全基礎包。我把安全基礎包的依賴去掉之後編譯不過。然後又查看了他的build.gradle清單檔案。發現他集成了阿里的實人認證的SDK。實人認證SDK裡包括了關於安全的jar包。
我抱著試一試的態度,申請實人認證的SDK接入。程式不閃退了。
附上阿里實人認證的幫助文件:
更新 此方法太麻煩 ,請參照第4條做。完美解決。
4. 整合友盟時進行前期分享遇到的
ClassNotFoundException: Didn't find class "org.apache.http.conn.scheme.SchemeRegistry"
Apache HTTP 客戶端棄用
在 Android 6.0 中,我們取消了對 Apache HTTP 客戶端的支援。 從 Android 9 開始,預設情況下該內容庫已從 bootclasspath 中移除且不可用於應用。
要繼續使用 Apache HTTP 客戶端,以 Android 9 及更高版本為目標的應用可以向其 AndroidManifest.xml的application節點下 新增以下內容:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
<application
android:name=".Global.MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:allowBackup">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</application>
5.Android Studio Git錯誤:
報錯資訊:
Can't Update
No tracked branch configured for branch master or the branch doesn't exist.
To make your branch track a remote branch call, for example,
git branch --set-upstream-to=origin/master master (show balloon)
網上搜了。用VCS——》Git——》Rebase 方法無效。
解決方案:
找到專案目錄 右鍵開啟Git Bash Here
然後輸入命令:
第一步:
git push origin master
origin根據情況變化,例如我的名字是sqb 就是git push sqb master
第二步:
git push -u origin master
完成。再去Android Studio 操作,一切正常。
目前持續爬坑中,會更新到專案結束