Unity3d使用微信支付是屬於APP內發起支付調用的情況,其本質上是在安卓項目上使用微信SDK,安卓項目開發完成后再導入到Unity中作為Unity插件使用,即Unity中C#調用安卓(Java)代碼的流程。
微信官方給出的支付Demo在這里,但是使用過程中遇到很多坑,網上類似的文章很多,但大多年代久遠,不清楚其他人做安卓微信支付是否也是踩着這些坑過來的,總之記錄下來方便以后再遇到。
首先,該Demo居然是個遠古時代的Eclipse(基於ADT插件)的安卓項目!你可以選擇下載Eclipse和ADT,在Eclipse中接着開發/學習,也可以選擇把Eclipse項目導入到Android Studio中並改用Gradle管理。
如果選擇使用Eclipse,資源下載和使用細節參考這里。如果選擇使用Android Studio,導入Eclipse項目可參考基礎教程和進階教程。為了順應時代潮流,我這里選擇用AS。
由於官方Demo自帶各種Bug,建議基於該項目來學習和開發。該Eclipse項目中只有一個工程,導入AS后該工程會變為一個自動命名為app的模塊(Module),最好是導入到一個空文件夾中(等同於新建一個AS項目)。
導入AS后,接下來就是下載各種安卓平台版本的問題,因為下載的別人的項目,大家使用的SDK版本和編譯工具版本可能都不一樣。
我這邊根據個人IDE情況,在項目根路徑\app\build.gradle文件中,修改編譯工具和安卓平台版本如下:
Gradle也根據已安裝的版本,改用了gradle-4.4-all版本。AS的設置中,Gradle設置默認的目錄路徑是C:\Users\用戶名\.gradle\wrapper\dists\ ,根據你已安裝的Gradle版本來修改,重新編譯后AS會自動下載。但由於國內蛋疼的GFW,通常很難下載下來,手動配置Gradle參考這里,自行用迅雷下載下來后放到Gradle默認目錄下,不需要解壓縮!AS在使用時會自動解壓。
解決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。
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中新增一行: