2012-09-18 100 views
0

對於我的項目之一,我需要將我的java class的本地c代碼調用到我的項目中。爲此我做了以下步驟。如何使用包含共享庫(.so)創建JAR文件

  1. 在我的java類中,我聲明瞭一些本地方法,這是我的項目所必需的。即

    public native String print(String pM,int len); 
    
    public native int openPrint(); 
    
  2. 我發起的庫文件,如下圖所示

    static 
    { 
        System.loadLibrary("print"); 
    } 
    
  3. 在此之後,我創建的頭文件對於Java代碼。

  4. 創建的C文件並在此之後我生成的庫文件即libprint.so使用ndk-build

  5. 庫文件創建成功在libs->armeabi->libprint.so

  6. 以上在C的方法實現

  7. 每當我運行Java應用程序它給錯誤說,

    Exception in thread "main" java.lang.UnsatisfiedLinkError: 
        no print in java.library.path 
    

我該如何解決這個問題。

我想給這種應用到其他Android開發人員,使他們能夠創建一個沒有做電話本地人,且不產生libprint.so文件

這意味着我得給我自己的API應用開發這個應用程序。爲此我必須創建JAR文件。其中包括java.classlibprint.so(共享庫)等..

如何創建JAR文件,其中包括libprint.so也..

我使用Eclipse和開放JDK6做Ubuntu的所有東西上面。

+0

可能的重複:http://stackoverflow.com/questions/2937406/how-to-bundle-a-native-library-and-a-jni-library-inside-a-jar – oers

+1

可能想看一看在相關的問題。 [如何對管束-A-本機庫和 - a - JNI的庫內側-A-罐(http://stackoverflow.com/questions/2937406/how-to-bundle-a-native-庫和 - a - JNI的庫內側-A-罐子?RQ = 1) – asgs

回答

1

在Windows中,如果jar使用dll,則必須將dll複製到jar內的根文件夾。之後,程序會找到它。

試試吧,它可能會幫助你。

相關問題