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

时间:2013-11-18 12:03:13

标签: 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

每个项目都会出现此问题,我尝试将其调试为“本机”。 我看过thisthisthis主题,但这个解决方案对我的情况没有任何影响。

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

清单

 ...
<uses-sdk 
    android:minSdkVersion="14"
    android:targetSdkVersion="14" />
<application android:label="@string/app_name"
             android:debuggable="true">
 ...

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp
include $(BUILD_SHARED_LIBRARY)

项目选项中的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>

Edit2 重要通知。我尝试在不同的计算机上运行debug as native并执行后续步骤git clone - &gt;导入到ide - &gt;调试为本机。所有机器都具有几乎相同的配置(Win7对于所有机器都是通用的)。这个问题只出在我的电脑上。 我尝试了不同的IDE(eclipse + cdt,adt),清理了path,检查了行结尾。 Finnaly我决定在linux VM下开发本机代码。这是我的解决方案。此外,我不再需要cygwin来交叉编译一些库。

6 个答案:

答案 0 :(得分:11)

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

对于此目标,应禁用$(info …)$(__ndk_info)等所有使用。

答案 1 :(得分:5)

当eclipse打印&#39;未知应用程序ABI&#39;

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

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

[$DATE $TIME - $PROJECT] Unknown Application ABI: 
[$DATE $TIME - $PROJECT] $ANY
[$DATE $TIME - $PROJECT] Unable to detect application ABI's

如何解决此问题

首先手动执行命令

make --no-print-dir -f $NDK_ROOT/build/core/build-local.mk -C $PROJECT_ROOT DUMP_APP_ABI

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

x86 armeabi

特别是在我的情况下,我遗漏了GStreamer的环境变量。所以要修复此I specified GSTREAMER_SDK_ROOT variable in Android.mk file

答案 2 :(得分:2)

我解决了#34;未知应用程序ABI&#34;做三件事:

  1. 代替
    APP_ABI:=全
    通过
    ABI:= armeabi
    在Application.mk

  2. 添加
    APP_PLATFORM:= android-11
    到Application.mk

  3. 在调用Debug As之前启动模拟器Android原生应用程序。 通常Eclipse显示&#34; Android设备选择器&#34;如果我调用Debug As并且没有连接任何设备。然后我可以从那里启动模拟器。但在不好的情况下,这并没有发生。我不得不调用Windows | Android虚拟设备管理器 并确保我配置并启动了有效的模拟器。 然后Debug As工作正常,显示&#34; Android Device Chooser&#34;并在所选设备上执行 (无论是模拟器还是真实的)。这个问题不可重现:一旦Eclipse开始在模拟器上调试,它就没有显示&#34; Unknown Application ABI&#34;甚至在我关闭模拟器之后。另请注意,我连接了一个真实的设备。与真实设备的通信可能以某种方式破坏并导致错误。

答案 3 :(得分:1)

检查您的Android.mk文件。如果您从Android.mk打印一些调试信息,则会出现此问题

$(info YOU_MESSAGE)

答案 4 :(得分:0)

我遇到了同样的问题,&#34;未知的应用程序ABI:&#34;。并尝试了所有可能的解决方案,甚至想要格式化我的窗口。最后,我发现它的TortoiseGit导致了这个问题。删除TortoiseGit后,&#34;调试为本机&#34;效果很好。

答案 5 :(得分:0)

我也遇到了这个问题,花了几个小时在我的环境中解决这个问题。在互联网上收集了几个提示之后,我尝试了最后一个选项,它确实有用,那就是:

Eclipse或NDK(可能)会干扰git二进制文件。检查git是否在Path环境变量中并从那里删除它(计算机&gt;属性&gt;高级系统设置&gt;环境变量)

我相信这个解决方案可能对某些人有所帮助。