解決jni調用在Android5.x系統閃退問題

來源:互聯網
上載者:User

標籤:android5-x   jni   閃退   

日誌資訊如下:
08-14 15:48:41.127: A/art(5526): art/runtime/check_jni.cc:70] JNI DETECTED ERROR IN APPLICATION: illegal class name ‘xxx.xxx.xxx’
08-14 15:48:41.127: A/art(5526): art/runtime/check_jni.cc:70] (should be of the form ‘package/Class’, [Lpackage/Class;’ or ‘[[B’)
08-14 15:48:41.127: A/art(5526): art/runtime/check_jni.cc:70] in call to FindClass

check_jni.cc源碼地址:https://android.googlesource.com/platform/art/+/kitkat-dev/runtime/check_jni.cc

看日誌是在調用FindClass是出錯的。在FindClass的時候會調用CheckClassName方法檢查類名是否合法。CheckClasName方法源碼如下:

  // Checks that ‘class_name‘ is a valid "fully-qualified" JNI class name, like "java/lang/Thread"  // or "[Ljava/lang/Object;". A ClassLoader can actually normalize class names a couple of  // times, so using "java.lang.Thread" instead of "java/lang/Thread" might work in some  // circumstances, but this is incorrect.  void CheckClassName(const char* class_name) {    if (!IsValidJniClassName(class_name)) {      JniAbortF(function_name_,                "illegal class name ‘%s‘\n"                "    (should be of the form ‘package/Class‘, [Lpackage/Class;‘ or ‘[[B‘)",                class_name);    }  }



在CheckClassName方法中調用了IsValidJniClassName方法,通過google搜尋”IsValidJniClassName site:android.googlesource.com”,發現IsValidJniClassName方法的聲明在utils.h中,實現在utils.cc中。



下面是utils.h和utils.cc的連結地址:
https://android.googlesource.com/platform/art/+/master/runtime/utils.h
https://android.googlesource.com/platform/art/+/kitkat-release/runtime/utils.cc

IsValidJniClassName方法實現如下:

他調用了IsValidClassName方法,注意第三個參數是‘/‘,這是類名的分隔字元,而我這裡調用FindClass時類名是使用了‘.‘分隔,改成‘/‘,問題就解決了。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

解決jni調用在Android5.x系統閃退問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.