正文

由银联开发包调试引出的Android Studio的一个八哥

(2019-05-04 06:28:27) 下一个

由银联开发包调试引出的Android Studio的一个八哥

最近有段痛苦的经历,写出来让大家开心开心!

最近公司的flutter项目由于需要接入银联卡支付,我google了一下,看了一下银联开发的开发文档,不算复杂。就跟老板说,一周能搞定。

于是,下载开发包,申请开发者账号,不过,商户开户(海外)却不知道在那里?有问题?找客服,客服很客气的回答,需要我提供资料,然后她来转给
当地的收单机构跟我们联系。(结果现在都没人跟我联系...?)

项目开始,先弄iOS的,由于这个是需要C++/C混编,这个难不了我,很快,银联卡支付界面出来了,用测试卡测试了一般,搞定!

好顺利啊,心想!

接着开始Android,jar拷贝,lib拷贝,data.bin拷贝,于是,痛苦的事情就发生了。

点击支付按钮,程序一下就崩溃了,Android Studio 显示

java.lang.RuntimeException: Unable to start activity ComponentInfo{xxxxxxx/com.unionpay.uppay.PayActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'long java.io.InputStream.skip(long)' on a null object reference

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2690)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2755)

        at android.app.ActivityThread.-wrap12(ActivityThread.java)

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1495)

        at android.os.Handler.dispatchMessage(Handler.java:102)

        at android.os.Looper.loop(Looper.java:154)

        at android.app.ActivityThread.main(ActivityThread.java:6196)

        at java.lang.reflect.Method.invoke(Native Method)

        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'long java.io.InputStream.skip(long)' on a null object reference

        at java.io.FilterInputStream.skip(FilterInputStream.java:151)

        at com.unionpay.mobile.android.resource.c.a(Unknown Source)

        at com.unionpay.mobile.android.widgets.m.<init>(Unknown Source)

        at com.unionpay.mobile.android.widgets.m.<init>(Unknown Source)

        at com.unionpay.mobile.android.plugin.BaseActivity.onCreate(Unknown Source)

        at com.unionpay.uppay.PayActivity.onCreate(Unknown Source)

        at android.app.Activity.performCreate(Activity.java:6698)

        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140)

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2643)
    
心想,不是吧!有问题,找谷哥!

于是,搜了一般,有人问过,不过回答是 data.bin要拷贝到工程的 assets目录,我查了下,没问题啊,接着用最愚蠢的办法,
把assets/data.bin拷贝到所有的目录下,再运行,还是同样的错误!

查了下银联开发包的反编译代码

if (var14 == null) {
    InputStream var16 = a.class.getClassLoader().getResourceAsStream("assets/data.bin");
    DataInputStream var19 = new DataInputStream(var16);

    try {
....

心里不禁大骂那些家伙,大猿何苦为难小猿呢?世间的八哥已经是如此伤人!

不得不用各种招数.

......九阳神功....
............
....你师傅教了你三路剑法,上中你都没学....
....
...我底裤外穿...
嘿,醒醒吧!
哎,我不是老总,我只是码工,我整天斗八哥,只是为生活!

看着小孩钢琴练累了,在沙发趴一下,接着起来练,练大提琴累了,往椅子靠一靠,接着练(我自己是把椅子,家里人依靠我,我还能依靠谁呢?)

嘿,醒醒吧!努力!努力!

于是,从一穷二白开始,建一个新的project,引入银联开发包,working..

接着开始引入插件,二分法排除,

.......

....怎么银联没返回了?(估计我太频繁访问,银联把我拉黑了,)啊,银联大哥,我只是在调试,没力气黑你!
.....

总算找到原因了,原来google 的 crashlytics跟银联的冲突了..

真正的问题是哪里呢?

接着努力!努力!

总算找到了,于是发邮件给google求助,过了10来分钟,google回复让我把Android Studio 3.4 downgrade 到 3.3.2,

com.android.tools.build:gradle:3.4.0也降低版本,于是,我把AS 3.4卸载,重新下载了3.3.2,而且把

com.android.tools.build:gradle:3.4.0也改为com.android.tools.build:gradle:3.2.1,

clean project --> rebuild--> run

于是,银联的支付界面总算在Android手机上出来了。

......

心里在骂银联的同时,不禁感叹,自己那是什么程序猿,码农,完全是个不折不扣的码奴!

尽管很努力,老板还是觉得这个App怎么老是有问题,而且还想让我当产品经理(PM+PM+ Full Stack+Dev OPs),我一台电脑开着Mysql workbench在建库表,调sql,写存储过程,
还开着Elipse写Spring boot代码,还开着Android Stuido 写java, XCode写OC, Swift,还要开着Visual Studio Code 
来写flutter 和 PHP,
天啊,难道还要我开着Visio ?再开Photo Shop?

啊,这不是苹果电脑啊,这是鸭梨!

 

 

[ 打印 ]
阅读 ()评论 (0)
评论
目前还没有任何评论
登录后才可评论.