JNIが開発したよくあるエラー&&Android.mkファイル説明&&jni開発の簡単な流れ

2414 ワード

1.jni開発のよくあるエラー
[1]Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mkはあなたのjniディレクトリの下にAndroidが必要だと説明しています.mkファイル
[2]11-21 02:26:39.995: E/AndroidRuntime(434): Caused by: java.lang.UnsatisfiedLinkError: helloFromC 11-21 02:26:39.995: E/AndroidRuntime(434): at com.itheima.jnierror.MainActivity.helloFromC(Native Method) 11-21 02:26:39.995: E/AndroidRuntime(434): at com.itheima.jnierror.MainActivity.click(MainActivity.java:18)11-21 02:26:39.995:E/Android Runtime(434):...14 more説明ライブラリファイルがロードされていません
[3]11-21 02:29:12.358: E/AndroidRuntime(1527): Caused by: java.lang.UnsatisfiedLinkError:Couldn’t load hello:findLibrary returned nullは、ライブラリsoファイルを生成し、シミュレータのアーキテクチャと一致しないことを示しています.
    :
             jni       Application.mk  
                        APP_ABI
                APP_ABI := armeabi-v7a
                APP_ABI := x86
        APP_ABI := mips
        APP_ABI := armeabi armeabi-v7a x86 mips
        APP_ABI := all

[4]jni/Hello.c:10:3:error:parameter name omitted宣言のパラメータが漏れていることを示します
[5]jni/Hello.c:9:1:error:unknown type name‘JNIEXPORT’はjniを導入するのを忘れたことを示しています.hヘッダファイル
[6]jni/Hello.c:2:20: fatal error: stulib.h:No such file or directory導入可能なヘッダファイルのアルファベットが間違っていることを説明
[7]11-21 09:14:36.148:E/dalvikvm(1565):VM abortingはあなたが呼び出した方法が間違っていることを示しています
2.Android.mkファイルの説明
#$()               
LOCAL_PATH := $(call my-dir)
#$            
include $(CLEAR_VARS)

# hello                 hello        lib 
LOCAL_MODULE    := hello
#    C      
LOCAL_SRC_FILES := Hello.c
#          
include $(BUILD_SHARED_LIBRARY)
#             
  #      .so .dll                           
  #      .a            

3.jni開発の簡便な流れ(把握しなければならない)
[1]ローカルメソッドをローカルで宣言[2]eclipseでwindowでndk環境を構成する
[3]javahを使ってjniスタイルのヘッダファイルを生成するあなたの個人的な習慣によって私はいわゆる
[4]ローカルサポートを追加するにはAndroidtools->add native support
[5]デフォルトでcpp形式のファイルを生成し、cppをc Androidに変更する.mkプロファイルを変更するLOCAL_SRC_FILES := simple.c[6]Cコードを実現する[7]Cにハンマーを与えるにはハンマーで音を決めるだけである[8]最後のステップは必ずライブラリファイルstaticの静的方法をロードしてSystemを追加することを覚えておく.loadLibrary(“simple”);