【Unity】微信支付SDK官方安卓Demo的使用問題

Unity3d使用微信支付是屬於APP內發起支付調用的狀況,其本質上是在安卓項目上使用微信SDK,安卓項目開發完成後再導入到Unity中做爲Unity插件使用,即Unity中C#調用安卓(Java)代碼的流程。php

微信官方給出的支付Demo在這裏,可是使用過程當中遇到不少坑,網上相似的文章不少,但大多年代久遠,不清楚其餘人作安卓微信支付是否也是踩着這些坑過來的,總之記錄下來方便之後再遇到。html


首先,該Demo竟然是個遠古時代的Eclipse(基於ADT插件)的安卓項目!你能夠選擇下載Eclipse和ADT,在Eclipse中接着開發/學習,也能夠選擇把Eclipse項目導入到Android Studio中並改用Gradle管理。java

若是選擇使用Eclipse,資源下載和使用細節參考這裏。若是選擇使用Android Studio,導入Eclipse項目可參考基礎教程進階教程。爲了順應時代潮流,我這裏選擇用AS。android

因爲官方Demo自帶各類Bug,建議基於該項目來學習和開發。Eclipse項目中只有一個工程,導入AS後該工程會變爲一個自動命名爲app的模塊(Module),最好是導入到一個空文件夾中(等同於新建一個AS項目)。git


導入AS後,接下來就是下載各類安卓平臺版本的問題,由於下載的別人的項目,你們使用的SDK版本和編譯工具版本可能都不同。github

我這邊根據我的IDE狀況,在項目根路徑\app\build.gradle文件中,修改編譯工具和安卓平臺版本以下:apache

Gradle也根據已安裝的版本,改用了gradle-4.4-all版本。AS的設置中,Gradle設置默認的目錄路徑是C:\Users\用戶名\.gradle\wrapper\dists\ ,根據你已安裝的Gradle版原本修改,從新編譯後AS會自動下載。但因爲國內蛋疼的GFW,一般很難下載下來,手動配置Gradle參考這裏,自行用迅雷下載下來後放到Gradle默認目錄下,不須要解壓縮!AS在使用時會自動解壓。api


解決Gradle和工具版本問題後,下一個碰到的問題是編譯項目(菜單項Build/Make Project)後會遇到萬惡的aapt2錯誤。該錯誤貌似是Android Studio3.X版本自帶的Bug。微信

Caused by: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

很容易搜到解決辦法是在gradle.properties中添加一行代碼禁用Aapt2。app

android.enableAapt2=false

注意看清楚,是在gradle.properties文件中,而不是在gradle-wrapper.properties文件中!寫在gradle-wrapper.properties從新編譯依然會碰到這個報錯!

因爲該項目默認是沒有gradle.properties文件的,須要自行建立。建立時不要在AS中(由於使用的視圖多是Project或Android),要在系統文件管理器中,在項目根路徑新增該文件,並寫上android.enableAapt2=false

以後點擊Asyn Now讓Gradle從新編譯就好了。


解決導入工程的各類環境問題後,下一個問題是官方Demo自帶的Bug!編譯項目,在AS中會遇到一個這樣的Bug:

libpng error not a png file

項目中自帶的一些圖片資源雖然是png後綴的,但其實倒是個jpg文件!解決辦法參考這裏或者這裏。或者直接用上面提到的基於這個項目來作,該項目已經改好了這個Bug。


再次編譯項目,此次的報錯是 項目根路徑\app\src\main\java\net\sourceforge\simcpux\Util.java,會發現該文件中引入的org.apache.http包報錯了。

解決辦法參考這裏。緣由是項目太老,使用的org.apache.http包已過期了,改用引入org.apache.http.legacy庫便可。在項目根路徑\app\build.gradle中新增一行: