使用NDK編譯含JNI的Android專案常見問題解決方案

楊小明發表於2015-03-10
有時候,自己下載的或者拷貝過來的JNI專案出現莫名錯誤,通常是找不到標頭檔案,可能解決方案如下:

Removing the C nature:

The only way I could find to reliably removed the C nature from the project was by hand editing Eclipse's .project file for the project.

  1. Close the Eclipse project (e.g. by quitting Eclipse).

  2. Open the .project file in a text or xml editor. There will be at least 2 <buildCommand> nodes that need to be removed. Remove the <buildCommand> node with name org.eclipse.cdt.managedbuilder.core.genmakebuilder and all its children, and the <buildCommand> node with name org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder and its children. Finally, remove the lines:

    <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>

  3. Completely remove the .cproject file.

Adding back the Android Native nature

Reopen the project in Eclipse. Then right-click on the project in the Project Explorer, and from the "Android Tools" contextual menu, choose "Add Native Support...".

 
Android JNI專案提示“Unresolved inclusion: <jni.h>”可能的其他解決方案:
  1. Paths and Symbols中路徑不正確,考慮修改Android.MK檔案內容,比如增加空行等(注意Android.MK檔案中不需要有LOCAL_C_INCLUDES欄位 ,系統會根據LOCAL_SRC_FILES自動新增需要的標頭檔案,否則標頭檔案將出現二義性),重新編譯一次專案,Android.MK檔案中LOCAL_SRC_FILES所依賴的標頭檔案將會在Project Properties -> C/C++ General -> Paths and Symbols中被自動新增;
  2. string.h、jni.h等C標頭檔案“Unresolved inclusion”,考慮: NDK Project -> New -> Folder -> Advanced -> Link to alternate location(Linked Folder),新增:D:\ADT\android-ndk-r9d\platforms\android-18\arch-arm\usr\include;
  3. 考慮:properties--->C/C++ General,關閉Code Analysis功能,解決大部分錯誤;

相關文章