1

libusb.so を使用しようとしています Android プロジェクトで libusb ライブラリを使用するにはどうすればよいですか。

libusb ソースを使用して Android プロジェクト用の libusb ライブラリをコンパイルしました。新しく生成されたライブラリ libusb.so の関数をコードで使用したいと考えています。次のコードを使用しました.関数がロードされているかどうかを確認するだけです.libusbライブラリを使用してアプリにデバイス情報をリストするにはどうすればよいですか.

jni ディレクトリのコード..

libTest.c

#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <sys/types.h>
JNIEXPORT jstring JNICALL Java_com_example_loadlibrary_MainActivity_libTask(JNIEnv* env, jobject obj)
{
if( libusb_init(NULL) )
    return (*env)->NewStringUTF(env, "Library Loaded Successfuly!");
else
    return (*env)->NewStringUTF(env, "Can not load library........");
}

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include $(CLEAR_VARS)

LOCAL_MODULE := libusb-1.0

LOCAL_SRC_FILES := libusb-1.0.so

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := libTest
LOCAL_SRC_FILES := libTest.c

include $(BUILD_SHARED_LIBRARY)

libusb-1.0.so

src には次の Java ファイルが含まれています。

MainActivity.java

package com.example.loadlibrary;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView  tv = new TextView(this);
    tv.setText(libTask());
    setContentView(tv);


}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
private native String libTask();
static{
    System.loadLibrary("usb-1.0");
    System.loadLibrary("libTest");
 }

}

しかし、ndkコンパイルでエラーが表示されます:

**エラー: 'libusb_init' への参照が未定義です collect2: ld は 1 つの終了ステータスを返しました make:[obj/local/armeabi/libTest.so] エラー 1 *

関数が私のコードで定義されていないことを示しています。では、どうすればすべての機能を機能させることができるのでしょうか....

そして最後に私がそうするなら

if( libusb_init(NULL) ) を次のように置き換えます: if(1)

すべてのファイルが生成されますが、次のエラーが表示されます。

ターゲットLoadlibrary.exe' failed makefile /Loadlibrary/Debug line 31 C/C++ Problem undefined reference to_WinMain@16 のレシピ' Loadlibrary 行 39、外部ロケーション: \usr\src\debug\cygwin-1.7.17-1\winsup\cygwin\lib\libcmain.c C/C++ 問題の作成: * [Loadlibrary6.exe]エラー 1 Loadlibrary C/C++ の問題

4

2 に答える 2

1

最初にライブラリをロードしてから、その中の関数を使用します

      static{
      System.loadLibrary("usb-1.0");
      System.loadLibrary("libTest");
      }
      public final static native String libTask(String st); //libTask is returning a string also...

.so ファイルは「jni」フォルダーにあるため、まずビルド後に「libs/armeabi」フォルダーにも作成されていることを確認してください??

于 2013-03-05T11:13:14.037 に答える
1

私が NDK と libusb サポートを使用してビルドするために使用したものは次のとおりです。 Android.mk に追加します。

LOCAL_LDLIBS :=-L/path/to/your/compiled/libusb.so -lusb
試してみる。お役に立てれば。

于 2013-05-07T06:42:02.373 に答える