首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Service 中呼叫 JNI 失敗:靜態載入庫的時機與上下文

     編輯:程式設計綜合問答

現象

同一個含 native 方法的類別,在 Activity 呼叫正常,在 Service 中報 UnsatisfiedLinkError。

原因

類別的靜態初始化區塊 static { System.loadLibrary("mylib"); } 只有在類別**首次被主動使用**時才執行。若 Service 啟動時該類別已被 Activity 載入,則庫已載入;若 Service 獨立進程(android:process=":remote"),則**不共享記憶體**,需再次載入。

解決

  1. 確保類別定義包含靜態載入區塊:
    
    public class JniWrapper {
        static { System.loadLibrary("mylib"); }
        public native int doWork();
    }
    
  2. 若 Service 為獨立進程,在 Service onCreate 中顯式呼叫 System.loadLibrary("mylib") 或觸發類別初始化 Class.forName("com.example.JniWrapper")。
  3. 檢查 AndroidManifest.xml 的 android:process 屬性,預設同進程不需額外處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved