Android MSI SDR设备示例代码未编译

Android MSI SDR设备示例代码未编译,android,android-ndk,java-native-interface,Android,Android Ndk,Java Native Interface,我正在尝试使用android应用程序与一个 此设备是SDRPlay SDR设备的克隆,并与其软件和驱动程序兼容 我正在尝试使用OTG电缆和android手机与此接口 android驱动程序可以从这里下载 它位于API/HW–V2.11(2017年11月15日)链接()下的Android选项卡中 可在此处找到此驱动程序的可能示例代码: 在制作完整的android程序之前,它说这个库(libmir_sdr_api.a)应该使用ndk build构建到一个.so库文件中 我目前在这里有Android的

我正在尝试使用android应用程序与一个

此设备是SDRPlay SDR设备的克隆,并与其软件和驱动程序兼容

我正在尝试使用OTG电缆和android手机与此接口

android驱动程序可以从这里下载

它位于API/HW–V2.11(2017年11月15日)链接()下的Android选项卡中

可在此处找到此驱动程序的可能示例代码:

在制作完整的android程序之前,它说这个库(libmir_sdr_api.a)应该使用ndk build构建到一个.so库文件中

我目前在这里有Android的hello jni示例项目:

我已经使用Android.mk文件、libmir_sdr_api.a、mir_sdr.h、initialization-jni.cpp、demo-jni.cpp和demo-jni.h替换了jni文件夹,这些文件在我上面链接的AndroidIntegrationNote.pdf文件的第3节中提到

从hello jni项目文件夹执行ndk build时,出现以下错误:

Android NDK: Found platform level in ./default.properties. Setting APP_PLATFORM to android-25.
Android NDK: android-25 is an alias for android-24. Adjusting APP_PLATFORM to match.
[arm64-v8a] Gdbserver      : [aarch64-linux-android] libs/arm64-v8a/gdbserver
[arm64-v8a] Gdbsetup       : libs/arm64-v8a/gdb.setup
[x86_64] Gdbserver      : [x86_64-linux-android] libs/x86_64/gdbserver
[x86_64] Gdbsetup       : libs/x86_64/gdb.setup
[armeabi-v7a] Gdbserver      : [arm-linux-androideabi] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup       : libs/armeabi-v7a/gdb.setup
[x86] Gdbserver      : [i686-linux-android] libs/x86/gdbserver
[x86] Gdbsetup       : libs/x86/gdb.setup
make: *** No rule to make target 'jni/initialisation-jni.cpp', needed by 'obj/local/arm64-v8a/objs-debug/mirics-jni/initialisation-jni.o'.  Stop.  
我习惯于编译NDK代码起诉Android Studio和cmake,所以我不确定这里发生了什么。我也无法通过cmake链接.a文件,因此我想尝试一下驱动程序制造商的示例代码,但它也不起作用。早期链接的pdf文件中的Android.mk文件是否不完整,或者我没有正确构建它?以下是Android.mk文件的内容:

# $(call my-dir) returns the local directory which is the jni directory  
LOCAL_PATH := $(call my-dir)  
# libmir_sdr_api.a – this section creates a version of the Mirics API to be used below  
include $(CLEAR_VARS)  
LOCAL_MODULE := mir_sdr_api-prebuilt  
LOCAL_SRC_FILES := libmir_sdr_api.a  
LOCAL_EXPORT_C_INCLUDES := $(call my-dir)  
include $(PREBUILT_STATIC_LIBRARY)  
include $(CLEAR_VARS)  
# mirics-jni – this section uses the jni C++ source code to build the dynamic library  
LOCAL_MODULE := mirics-jni  
LOCAL_SRC_FILES := initialisation-jni.cpp demod-jni.cpp  
LOCAL_C_INCLUDES := $(call my-dir)  
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib  
LOCAL_STATIC_LIBRARIES := mir_sdr_api-prebuilt  
include $(BUILD_SHARED_LIBRARY)  

关于缺少的
jni/initialization jni.cpp
,您可能有文件
jni/initiali
z
initialization jni.cpp

此外,不幸的是,这是错误的。您只能在文件顶部轻松地使用
$(call my dir)
。幸运的是,Android NDK为您添加了jni目录以包含路径。不过,为了安全起见,最好写:

# $(call my-dir) returns the local directory which is the jni directory  
LOCAL_PATH := $(call my-dir)  
# libmir_sdr_api.a – this section creates a version of the Mirics API to be used below  
include $(CLEAR_VARS)  
LOCAL_MODULE := mir_sdr_api-prebuilt  
LOCAL_SRC_FILES := libmir_sdr_api.a  
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
include $(PREBUILT_STATIC_LIBRARY)  
include $(CLEAR_VARS)  
# mirics-jni – this section uses the jni C++ source code to build the dynamic library  
LOCAL_MODULE := mirics-jni  
LOCAL_SRC_FILES := initialization-jni.cpp demod-jni.cpp  
LOCAL_C_INCLUDES := $(LOCAL_PATH)  
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib  
LOCAL_STATIC_LIBRARIES := mir_sdr_api-prebuilt  
include $(BUILD_SHARED_LIBRARY)
最后,注意构建过程。您只有一种libmir\u sdr\u api。它是一种为32位ARM CPU构建的静态库。因此,您无法为其他体系结构构建libmirics jni.so。加

APP_ABIS = armeabi-v7a
应用程序.mk文件,或指定

abifilters = armeabi-v7a

在您的build.gradle中,如果您在Android Studio中构建库。

您的Android.mk指的是
jni/initialization jni.cpp
,它可能是您应该提供的文件,但不在那里。@AlexCohn它在那里,我已经提供了/jni中的所有文件。如果Android.mk本身在
jni/
文件夹中,您应该在
LOCAL\u SRC\u文件中删除
jni/
前缀,以便
初始化jni.cpp
@AlexCohn,我在
LOCAL\u SRC\u文件
声明中没有
jni//code>。错误消息确实显示了这一点,但我也包含了上面Android.mk的全部内容;它有
LOCAL\u SRC\u文件:=initialization-jni.cpp demod jni.cpp
对不起,我没有看到Android.mk文件。现在我有了一些答案。