我遇到了这样的问题:
[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
每个项目都会出现此问题,我尝试将其调试为“本机”。 我看过this,this和this主题,但这个解决方案对我的情况没有任何影响。
在其他计算机或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来交叉编译一些库。
答案 0 :(得分:11)
特别是在Windows上,可能是因为其中一个文件( project.properties , Application.mk , Android.mk ,或者 AndroidManfest.xml )的行结尾错误(CRLF)。您运行ndk-build DUMP_APP_ABI
并确保输出是干净的。
对于此目标,应禁用$(info …)
或$(__ndk_info)
等所有使用。
答案 1 :(得分:5)
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;做三件事:
代替
APP_ABI:=全
通过
ABI:= armeabi
在Application.mk
添加
APP_PLATFORM:= android-11
到Application.mk
在调用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;环境变量)
我相信这个解决方案可能对某些人有所帮助。