问题详述
推送SDK在初始化时报”java.lang.UnsatisfiedLinkError”或”TNET-JNI-LOAD-SO-FAIL“错误。
详细报错信息如下:
java.lang.UnsatisfiedLinkError: No implementation found for int org.android.spdy.SpdyAgent.configLogFileN(java.lang.String, int, int) (tried Java_org_android_spdy_SpdyAgent_configLogFileN and Java_org_android_spdy_SpdyAgent_configLogFileN__Ljava_lang_String_2II)at org.android.spdy.SpdyAgent.configLogFileN(Native Method)at org.android.spdy.SpdyAgent.configLogFile(Unknown Source)at com.taobao.accs.net.e.<init>(Unknown Source)at com.taobao.accs.net.BaseConnection.a(Unknown Source)at com.taobao.accs.internal.ACCSManagerImpl.sendControlMessage(Unknown Source)at com.taobao.accs.internal.ACCSManagerImpl.bindApp(Unknown Source)at com.taobao.accs.a.a(Unknown Source)at com.taobao.agoo.AliyunRegister.register(Unknown Source)at com.alibaba.sdk.android.push.vip.AppRegister$a.b(Unknown Source)at com.alibaba.sdk.android.push.vip.AppRegister$a.a(Unknown Source)at com.alibaba.sdk.android.push.vip.b.handleMessage(Unknown Source)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:148)at android.os.HandlerThread.run(HandlerThread.java:61)
或
04-20 11:34:02.035 15264-15383/cloud.aliyun.test E/awcn.TnetSpdySession: |[seq:AWCN2_2] connect exception org.android.spdy.SpdyErrorException: TNET_JNI_ERR_LOAD_SO_FAILat org.android.spdy.SpdyAgent.checkLoadSo(Unknown Source)at org.android.spdy.SpdyAgent.agentIsOpen(Unknown Source)at org.android.spdy.SpdyAgent.createSession(Unknown Source)at org.android.spdy.SpdyAgent.createSession(Unknown Source)at anet.channel.d.l.b(Unknown Source)at anet.channel.SessionRequest.a(Unknown Source)at anet.channel.SessionRequest.a(Unknown Source)at anet.channel.SessionRequest$a.onFailed(Unknown Source)at anet.channel.k.onEvent(Unknown Source)at anet.channel.i.run(Unknown Source)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)at java.util.concurrent.FutureTask.run(FutureTask.java:237)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)at java.lang.Thread.run(Thread.java:818)
这是什么原因引起的?
问题原因
推送SDK包含有so包(libtnet、libcocklogic),出现上述错误都是由于so包没有被成功加载导致的。请通过以下方法确认so包是被被正常添加:
将生成的.apk文件以.zip文件解压,查看对应的jniLibs是否正确包含armeabi、armeabi-v7a、x86体系架构的目录,检查是否有移动推送的libcocklogic.so和libtnet.so
解决方案
通过远程同步的方式集成推送SDK。推送SDK在V3.0.0及以上版本开始支持远程同步集成,在远程同步的过程中so包也被自动同步。推送SDK当前提供:armeabi,armeabi-v7a,arm64-v8a,mips,mips-64,x86,x86_64等架构的so包,如果您不需要这么多,可以在build.gradle文件中进行配置,选择需要的so包:
android {......defaultConfig {applicationId "com.xxx.xxx"......ndk {//选择要添加的对应cpu类型的.so库。abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a'// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'}......}......}
手动添加so包,将所需架构的so包放到指定路径默认为”src/main/jniLibs/‘’,若设置其他路径如libs,需要手动在build.gradle文件中指定:
android {compileSdkVersion 23buildToolsVersion "23.0.1"sourceSets {main {jniLibs.srcDirs = ['libs']}}}
该文章对您有帮助吗?