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........");
}

安卓.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' 的配方加载库第 39 行,外部位置:\usr\src\debug\cygwin-1.7.17-1\winsup\cygwin\lib\libcmain.c C/C++ 问题制作:* [Loadlibrary6.exe]错误 1 ​​加载库 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 回答