Eclipse匯入NDK例子工程

lostspeed發表於2016-05-30

Eclipse匯入NDK例子工程

前言

前幾天,想匯出NDK的例子,有的是編譯不過,有的是執行時報錯,查了資料,才知道是IDE環境配置有問題.

操作步驟記錄

試驗環境

Win7X64 + android-ndk-r10e

匯入

拿android-ndk-r10e自帶的hello-jni為例

解決匯入後的錯誤

匯入後,出現錯誤

[2016-05-30 07:35:34 - HelloJni] Unable to resolve target 'android-3'

在真機上執行報錯

`java.lang.UnsatisfiedLinkError: Couldn't load hello-jni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.hellojni-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.hellojni-1, /vendor/lib, /system/lib]]]: findLibrary returned null`

設定NDK路徑

工程中加入android-NDK本地支援

報錯,說沒有找到Cygwin

`[2016-05-30 07:56:10 - Unable to launch cygpath. Is Cygwin on the path?] java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, 系統找不到指定的檔案。`

可以看到, ARM版的libhello-jni.so已經生成了.

但是有編譯錯誤

這說明工程中的.h路徑不對

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

在ndk目錄中找到arm版的正確包含路徑,填入eclipse

關掉eclipse, 再開啟eclipse, 再重新編譯一次
編譯報錯

是清單檔案報錯了

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.hellojni"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-sdk android:minSdkVersion="3" />
    <application android:label="@string/app_name"
                 android:debuggable="true">
        <activity android:name=".HelloJni"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

修改成
去掉android:debuggable=”true”

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.hellojni"
      android:versionCode="1"
      android:versionName="1.0">

    <uses-sdk android:minSdkVersion="3" />
    <application android:label="@string/app_name">
        <activity android:name=".HelloJni"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest> 

關掉eclipse, 再開啟eclipse, 再重新編譯一次
現在在真機上可以執行了

雖然程式可以正常執行,但是可以看到Console有報錯提示.

[2016-05-30 08:49:11 - Unable to launch cygpath. Is Cygwin on the path?] java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, 系統找不到指定的檔案。

NDK高版本不需要Cygwin, 讓他報錯去吧.

相關文章