【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中新增一行: