正文

由銀聯開發包調試引出的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)
評論
目前還沒有任何評論
登錄後才可評論.