2012-07-26 49 views
16

試圖用jni c代碼構建一個簡單的helloWorld android/java應用程序。我在Windows 7上使用Eclipse Indigo。在非空間路徑中安裝了ndk r8,並使用ndk-build.cmd最終構建了c庫。然而,JAVAH生成的頭文件中有未解決的錯誤,類型'jint'無法解析,而JNIEnv,jclass

  • 類型「jint」無法解析
  • 類型「JNIEnv的」無法解析
  • 類型「JCLASS」無法解析

昨天沒有看到jni.h包含,但今天早上重新啓動後,該錯誤消失了。我還有一個未解決的JNIEXPORT和JNICALL錯誤,但是#定義它們似乎解決了這個問題。卡住上面的最後3個。 已搜索谷歌和堆棧溢出的答案,但只要有人發現一個解決方案,他們不會說什麼解決方案是:(

我已經檢查了包含在項目屬性中的Java和c/c + +透視圖。似乎是包含我想要的jni.h目錄,我使用的是android-14 for arm平臺,目標是4.0.3 IceCream Sanwich(令人困惑的是API 15?!)。我將嘗試使用的AVD用於測試這一點。 我已經試過關閉/重新打開該項目,從Eclipse中刪除和重新導入,但沒有已經奏效。

我丟失了一些包括?哪一些,我應該在哪裏設置呢? 真的很感謝你的幫助,

+2

#include 使用jint和JNIEnv所需的唯一標頭是jni.h.但是,你必須在extern「C」中使用它們。可能會發布你的代碼的一部分可以幫助 – codetiger 2012-07-26 10:10:17

+0

如果代碼與ndk-build一起構建,那麼你的問題就是使用eclipse。在菜單中的某處需要指向ndk包含,或者直接禁用ndk插件,所以它不在意。 – 2012-07-26 12:35:51

+1

我不知道如何粘貼一個代碼塊,而不會像純文本一樣出來。只需說這是一個非常簡單的自動生成的頭文件,用於將兩個數字相乘的函數。 @chris我應該在哪裏禁用ndk插件? – Gatica 2012-07-30 14:53:33

回答

16

最近我遇到了同樣的問題。在我的情況下,問題是我將Eclipse項目轉換爲C++項目,但我使用了C類型。因此,要解決這個問題,只是刪除行<nature>org.eclipse.cdt.core.ccnature</nature>.project文件從項目目錄:

<natures> 
<nature>com.android.ide.eclipse.adt.AndroidNature</nature> 
<nature>org.eclipse.jdt.core.javanature</nature> 
<nature>org.eclipse.cdt.core.cnature</nature> 
<nature>org.eclipse.cdt.core.ccnature</nature> 
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> 
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> 
<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature> 
</natures> 

然後重新啓動您的Eclipse。欲瞭解更多信息,你可以閱讀this

+1

您可以在Navigator視圖中看到.project文件並將其編輯爲Eclipse的項目文件編輯器。 – 2013-05-02 14:17:36

+0

有同樣的問題,這個答案解決了它。首先,我認爲OpenCV以某種方式引發了這些問題,但eclipes是原因。謝謝,這樣節省時間! – vRallev 2013-09-03 13:13:13

+0

謝謝!一段時間後,但忘了更新。 我重新導入了該項目,並應用修復,然後它的工作。 – Gatica 2014-05-21 14:37:20

7

儘量只在#include指令前添加一個#undef __cplusplus,像這樣:

#undef __cplusplus 
#include <string.h> 
#include <jni.h> 

這將迫使Eclipse來考慮NDK對象的non-c++定義。

+0

我認爲在Eclipse(開普勒),ADT和CDT中存在自動索引的各種問題。我嘗試了很多,但這解決了我的問題,因爲我們的大部分代碼都是C而不是CPP。 – Cookster 2014-08-25 22:20:00

19

右鍵單擊項目,然後轉到屬性屬性。

轉至C/C++常規 - >路徑和符號

包括 - > GNU C添加此等價的:

%ndkroot%\platforms\android-8\arch-arm\usr\include

您可能要指向NDK的其他平臺的版本,只是改變了路徑的Android的8部分。

+0

謝謝,這也解決了VS2012。 :) – Tom 2014-05-31 02:26:53

+0

這也可以在EclipseMars,android-ndk-r10e中解決它。謝謝! :) – lfree 2015-07-22 13:23:56

+0

我必須使用這個http://stackoverflow.com/a/16891713/2198418 – 2016-03-21 08:54:15

相關問題