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的层次更深

  • 相关阅读:
    42. Trapping Rain Water
    223. Rectangle Area
    645. Set Mismatch
    541. Reverse String II
    675. Cut Off Trees for Golf Event
    安装 VsCode 插件安装以及配置
    向上取整 向下取整 四舍五入 产生100以内随机数
    JS 判断是否为数字 数字型特殊值
    移动端初始配置,兼容不同浏览器的渲染内核
    Flex移动布局中单行和双行布局的区别以及使用
  • 原文地址:https://www.cnblogs.com/devilyouwei/p/12916683.html
Copyright © 2011-2022 走看看