zoukankan      html  css  js  c++  java
  • Android踩坑之couldn't find "libClingSDK.so"

    Android踩坑之couldn't find "libClingSDK.so"

    在android开发中一些涉及到硬件级的API需要引入第三方的sdk,通常都是一个jar包搭配一个.so文件,.so文件用于处理底层交互,这是C/C++超原生级别的,而不是JVM级别的。

    最近在作Cling手环的app开发,踩到一个巨坑

    这里要点名批评Cling的公司,SDK老不说,给出的官方文档和demo没有任何的更新,害我为了这个破.so文件耗费了一天多。

    错误提示如下:

    2020-05-19 14:01:38.344 16064-16064/com.hicling.iictcling E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.hicling.iictcling, PID: 16064
        java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.hicling.iictcling-5csq516Kff5PGkzYXaSCUw==/base.apk"],nativeLibraryDirectories=[/data/app/com.hicling.iictcling-5csq516Kff5PGkzYXaSCUw==/lib/arm64, /system/lib64, /system/product/lib64]]] couldn't find "libClingSDK.so"
            at java.lang.Runtime.loadLibrary0(Runtime.java:1067)
            at java.lang.Runtime.loadLibrary0(Runtime.java:1007)
            at java.lang.System.loadLibrary(System.java:1667)
            at com.hicling.clingsdk.bleservice.ClingBleControl.<clinit>(Unknown Source:2)
            at com.hicling.clingsdk.bleservice.ClingBleControl.a(Unknown Source:0)
            at com.hicling.clingsdk.bleservice.ClingCommunicatorService.onCreate(Unknown Source:15)
            at android.app.ActivityThread.handleCreateService(ActivityThread.java:3987)
            at android.app.ActivityThread.access$1600(ActivityThread.java:220)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1899)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:224)
            at android.app.ActivityThread.main(ActivityThread.java:7520)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
    

    错误是通过Android studio的Logcat打印出来的,app的现象是启动直接闪退,出现错误的代码段是:

     override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            ClingSdk.init(this, "HCd176b8b47b3ed84c", "92f767d18c3e843bb23e317617c55175", clingReady)
    
            ClingSdk.setBleDataListener(bleDataListener)
            ClingSdk.setDeviceConnectListener(mDeviceConnectedListener)
            ClingSdk.enableDebugMode(true)
            ClingSdk.start(this)
            // init everything in this activity, mainly the elements , webview
            init()
        }
    

    其实也就是ClingSdk调用的时候。

    话说回来,第三方的sdk真的坑太多了,以下是针对so文件找不到的解决方案:

    打开build.gradle(Module:app)

    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.3"
    
        defaultConfig {
            applicationId "com.hicling.iictcling"
            minSdkVersion 14
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            ndk {
                // 设置支持的SO库架构,第三方给的so库哪几种架构,就配置这几种架构
                abiFilters 'armeabi' , 'armeabi','x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
            }
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    
    }
    

    在defaultConfig中添加ndk配置

    这里给初学者普及以下,ndk相对于sdk

    ndk是面向底层C/C++接口调用的,这是最底层,几乎接近操作系统级别的调用,大部分用于一些特殊的硬件,这里Cling手环主要就是蓝牙设备功能的封装

    sdk是安卓操作系统提供的接口,调用的是安卓系统的提供的功能,基于JVM或者是安卓自己虚拟机的东西。

    ndk比sdk的层次更深

  • 相关阅读:
    转linux ln命令详解 简单
    商业智能哲学思索
    IE8 RTM 和 IE8 RC1 版本比较。
    汇编语言发展树.
    IE8卸载后遗症,不得不继续当小白鼠。。。
    商务智能系统实现数据管理的关键技术
    商务智能 是什么? 不是什么?
    Standard and Custom Toolset Configurations
    统一论:3G手机、云计算、SaaS、业务开发平台、SOA、BPEL [转]
    JAVA Atm测试实验心得
  • 原文地址:https://www.cnblogs.com/devilyouwei/p/12916683.html
Copyright © 2011-2022 走看看