Ping++ Android SDK 常见问题汇总

更新于:2018年12月07日 10:05:58

问题一:ClientSDK 调起支付的方法参数解释

//参数一:Activity 当前调起支付的Activity
//参数二:data 获取到的 Charge/Order/Recharge 的 JSON 字符串
Pingpp.createPayment(YourActivity.this, data);

问题二:与其他第三方 SDK 有冲突

  1. 存在相同的jar包

  2. 没有加过滤混淆的代码,导致包名被混淆成a/b/c

问题三: 微信支付失败,返回 wx_err_code:-1

参考:https://help.pingxx.com/article/123345

问题四: 启动项目,编译时报以下错误

Error:Execution failed for task ':lib:pingpp:transformNativeLibsWithStripDebugSymbolForRelease'

解决方法:

  1. gradle 更新到 3.3、Android Studio 更新到 2.3 的 将 compileSdkVersion 提高到23 及以上即可。可能在 gradle3.3 下不支持 compileSdkVersion 为 23 以下进行 NDK 编译

  2. 统一 so 文件的版本

问题五: 集成微信支付需要有一个 WxPayEntryActivity,这个类在哪里?我在Demo中没找到这个类?

这个类已经封装在SDK内部,无需开发者另外实现

问题六:调用 libpingpp.so 文件出错( unable to get realpath for the library "/data/app/com.xxx.xxx/lib/arm/libpingpp.so")Log 如下:

JNI DETECTED ERROR IN APPLICATION: java_class == nullin call to GetStaticMethodID from byte[] com.pingplusplus.android.crypto.Crypt.encryptData(java.lang.String, java.lang.String)

答: 没有导入 libpingpp.so 文件. 将 pingpp 下 libs 目录下的 libpingpp.so 文件拷贝到项目相应目录下。

问题七:调用 sdk 的时候 Pingpp.createPayment(arg0, arg1);报错com.pingplusplus.android.PaymentActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x0

答: 将 pingpp 的 res 目录下的资源文件拷贝到项目中。

问题八:调用微信支付, App 崩溃, Log 为:android.content.ActivityNotFoundException: Unable to find explicit activity class {xxx.xxx.wxapi.WXPayEntryActivity};

答:1.检查在清单文件(AndroidManifest.xml)中是否注册了 xxx.xxx.wxapi.WXPayEntryActivity 的 Activity. 如下设置

<activity-alias
    android:name="xxx.xxx.wxapi.WXPayEntryActivity"
    android:exported="true"
    android:targetActivity="com.pingplusplus.android.PaymentActivity"/>

2.若已经在清单文件中注册了该 Activity. 则检查工程路径和包名是否一致或者将 .wxapi.WXPayEntryActivity 路径补全为: 包名.wxapi.WXPayEntryActivity

问题九:Ping++ 和其他第三方SDK(如:高德地图、讯飞)同时存在,使用gradle导入Ping++, 会导致其他第三方SDK(如:高德地图、讯飞)找不到so而无法使用

报错原因: Ping++ SDK 提供了armeabi、armeabi-v7a 而其他第三方SDK(如:高德地图)提供了armeabi, 当手机是armeabi-v7a的 会去加载armeabi-v7a包下的so文件 这是会报其他第三方SDK(如:高德地图)的so文件找不到 而你上面的代码在打包的时候就只打包了armeabi 所以只会去armeabi包下找 因此不会出现报错 建议使用各种SDK时保持相同的so文件。

解决方案: 在build.gradle中设置ndk

ndk {
    //选择要添加的对应cpu类型的.so库。选择的so文件需要各种SDK保持一致
    abiFilters 'armeabi', 'x86'
    // 还可以添加 'x86_64', 'mips', 'mips64',, 'armeabi-v7a', 'armeabi-v8a'}

问题十:Android 5.0以上可支付,4.4以下找不到类的问题(即:multidex 的问题)。

答:方法数超过65535 在 Android 5.0以上自动会处理分包机制, 但在4.4及以下需要手动设置 使用 multidex 来解决该问题. 在build.gradle中导入compile 'com.android.support:multidex:1.0.0' 在Application中初始化MultiDex.install(this);

问题十一:Android 调起支付渠道,崩溃且没有具体的Log信息.

答:检查一下是否添加了混淆配置,将混淆过滤配置自己项目中

# Ping++ 混淆过滤
-dontwarn com.pingplusplus.**
-keep class com.pingplusplus.** {*;}

# 支付宝混淆过滤
-dontwarn com.alipay.**
-keep class com.alipay.** {*;}

# 微信或QQ钱包混淆过滤
-dontwarn  com.tencent.**
-keep class com.tencent.** {*;}

# 银联支付混淆过滤
-dontwarn  com.unionpay.**
-keep class com.unionpay.** {*;}

# 招行一网通混淆过滤
-keepclasseswithmembers class cmb.pb.util.CMBKeyboardFunc {
    public <init>(android.app.Activity);
    public boolean HandleUrlCall(android.webkit.WebView,java.lang.String);
    public void callKeyBoardActivity();
}

# 百付宝混淆过滤
-dontwarn com.baidu.**
-keep class com.baidu.** {*;}

# 内部WebView混淆过滤
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

问题十二:微信支付成功返回 App 的时候闪退

答:WxPayEntryActivity 这个类已在 SDK 内部实现,开发者不需要额外实现该类,将自己写的类删除即可。

问题十三:银联报错

java.lang.ClassNotFoundException: org.simalliance.openmobileapi.SEService或 can’t find reference class org.openmobileapi.SEService

报错原因: 缺少org.simalliance.openmobileapi.SEService,编译失败

解决方案: 将example-studio中libs下的org.simalliance.openmobileapi.jar拷到项目中依赖,但不要打包进apk中,有些手机会存在这个jar包

dependencies {
    provided files('libs/org.simalliance.openmobileapi.jar') //使用provided,不打包进apk
}

问题十四:招行一网通键盘奔溃或弹不出键盘

报错原因: 没有在string.xml中配置cmbkb_publickey字段

解决方案: 在自己项目中res/values/string.xml下配置该字段

<string name="cmbkb_publickey">填写自己的publickey</string>


    您需要登录后才可以回复