"未知的应用程序ABI:"而"调试为本机应用程序"

Joh*_*Doe 12 android android-ndk

我有这样的问题:

[2013-11-18 14:38:50 - HelloJni] Unknown Application ABI: 
[2013-11-18 14:38:50 - HelloJni] 
[2013-11-18 14:38:50 - HelloJni] Unable to detect application ABI's
Run Code Online (Sandbox Code Playgroud)

每个项目都会出现此问题,我正在尝试将其调试为"本机".我已经看过这个,这个这个主题,但这个解决方案并没有对我的案例产生任何影响.

在其他计算机或VM上,相同的项目可以使用相同的设置正常运行.

表现

 ...
<uses-sdk 
    android:minSdkVersion="14"
    android:targetSdkVersion="14" />
<application android:label="@string/app_name"
             android:debuggable="true">
 ...
Run Code Online (Sandbox Code Playgroud)

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

项目选项中的Verison也已设置为api-14.

我还下载了eclipse,sdk,ndk的新版本.我清理了所有系统范围的变量和PATH元素.我的机器在win7x64下运行.

PS.只有当我尝试调试时才会出现问题,当我构建并运行它时 - 运行良好.

Edit1这是我的ndk-build DUMP_APP_ABI大纲

c:\Users\Usr\workspace\HelloJni>D:\ndk\ndk-build.cmd DUMP_APP_ABI
armeabi

c:\Users\Usr\workspace\HelloJni>
Run Code Online (Sandbox Code Playgroud)

Edit2重要通知.我试图debug as native在不同的机器上运行下一步git clone- > import to ide - > Debug as native.所有机器都具有几乎相同的配置(Win7对于所有机器都是通用的).这个问题只出在我的电脑上.我试过不同的IDE(eclipse + cdt,adt),清理path,检查行结尾.Finnaly我决定在linux VM下开发本机代码.这是我的解决方案.此外,我不再需要cygwin来交叉编译一些库.

Ale*_*ohn 11

特别是在Windows上,可能是因为其中一个文件(project.properties,Application.mk,Android.mkAndroidManfest.xml)的行结尾错误(CRLF).您运行ndk-build DUMP_APP_ABI并确保输出是干净的.

应该禁用此目标的所有使用$(info …)$(__ndk_info)等.

  • 随着@Alex的慷慨帮助,我成功地解决了这个问题.我的Android.mk文件使用了一个环境变量(由Eclipse注入),以便包含另一个make文件(在我的例子中是OpenCV.mk).删除它只是添加一个硬编码的路径真的很神奇,我现在可以再次从eclipse调试本机代码. (2认同)
  • @Stav,实际上,它对你不起作用是相当合理的.但最有可能的是,它与Dropbox,cygwin甚至Windows无关.也许,通过Eclipse启动时`ndk-build DUMP_APP_ABI`的输出总是正常的.问题是(现在仍然)Eclipse为构建和启动准备了不同的"环境",并且您的启动环境没有相关设置,因此Eclipse等同于`ndk-gdb`失败. (2认同)

CAM*_*BAP 5

当eclipse打印'Unknown Application ABI'时

ABI检测逻辑放在com.android.ide.eclipse.ndk插件com.android.ide.eclipse.ndk.internal.NdkHelper类中.实际上,它着眼于命令的输出

make --no-print-dir -f $NDK_ROOT/build/core/build-local.mk -C $PROJECT_ROOT DUMP_APP_ABI
Run Code Online (Sandbox Code Playgroud)

如果输出不包含有效的ABI,您将看到如下消息(或消息):

[$DATE $TIME - $PROJECT] Unknown Application ABI: 
[$DATE $TIME - $PROJECT] $ANY
[$DATE $TIME - $PROJECT] Unable to detect application ABI's
Run Code Online (Sandbox Code Playgroud)

如何解决此问题

首先运行手动命令

make --no-print-dir -f $NDK_ROOT/build/core/build-local.mk -C $PROJECT_ROOT DUMP_APP_ABI
Run Code Online (Sandbox Code Playgroud)

如果输出包含错误,请先修复它.如果此命令正常工作,它应该生成空格分隔的ABI,如下所示:

x86 armeabi
Run Code Online (Sandbox Code Playgroud)

特别是在我的情况下,我缺少环境变量GStreamer.所以要修复这个GSTREAMER_SDK_ROOTAndroid.mk文件中指定的变量