您的位置:首页 > 移动开发 > Android开发

Android-windows下的jni实践之路

2015-10-30 18:45 417 查看
编译过程:

D:\programming>cd D:\programming\java\YourSafe\bin\classes\com\example\yoursafe

D:\programming\java\YourSafe\bin\classes\com\example\yoursafe>javah -jni MainAct

ivity

错误: 找不到 'MainActivity' 的类文件。

D:\programming\java\YourSafe\bin\classes\com\example\yoursafe>cd ../../..

D:\programming\java\YourSafe\bin\classes>javah -jni com.example.yoursafe.MainAct

ivity

无法找到类型 'android.annotation.SuppressLint' 的注释方法 'value()': 找不到andro

id.annotation.SuppressLint的类文件

错误: 无法访问android.app.Activity

  找不到android.app.Activity的类文件

D:\programming\java\YourSafe\bin\classes>javah -jni com.example.yoursafe.Hello

D:\programming\java\YourSafe\bin\classes>cd D:\programming\java\YourSafe\jni

D:\programming\java\YourSafe\jni>d:

D:\programming\java\YourSafe\jni>ndk-build

Android NDK: Could not find application project directory !

Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.

F:\360Apps\Android\android-ndk-r10\build/core/build-local.mk:148: *** Android ND

K: Aborting    .  Stop.

D:\programming\java\YourSafe\jni>ndk-build android.mk

Android NDK: Could not find application project directory !

Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.

F:\360Apps\Android\android-ndk-r10\build/core/build-local.mk:148: *** Android ND

K: Aborting    .  Stop.

D:\programming\java\YourSafe\jni>set NDK_PROJECT_PATH = D:\programming\java\Your

Safe

D:\programming\java\YourSafe\jni>ndk-build android.mk

Android NDK: Could not find application project directory !

Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.

F:\360Apps\Android\android-ndk-r10\build/core/build-local.mk:148: *** Android ND

K: Aborting    .  Stop.

D:\programming\java\YourSafe\jni>echo %D:\programming\java\YourSafe%

%D:\programming\java\YourSafe%

D:\programming\java\YourSafe\jni>echo % NDK_PROJECT_PATH%

% NDK_PROJECT_PATH%

D:\programming\java\YourSafe\jni>echo %NDK_PROJECT_PATH%

%NDK_PROJECT_PATH%

D:\programming\java\YourSafe\jni>set NDK_PROJECT_PATH=D:\programming\java\YourSa

fe

D:\programming\java\YourSafe\jni>echo %NDK_PROJECT_PATH%

D:\programming\java\YourSafe

D:\programming\java\YourSafe\jni>ndk-build

Android NDK: WARNING: APP_PLATFORM android-15 is larger than android:minSdkVersi

on 8 in D:\programming\java\YourSafe/AndroidManifest.xml

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: D:\programming\jav

a\YourSafe/jni/Android.mk

F:/360Apps/Android/android-ndk-r10/build/core/add-application.mk:209: *** Androi

d NDK: Aborting...    .  Stop.

D:\programming\java\YourSafe\jni>cd ..

D:\programming\java\YourSafe>cd..

D:\programming\java>cd yoursafe

D:\programming\java\YourSafe>ndk-build

Android NDK: WARNING: APP_PLATFORM android-15 is larger than android:minSdkVersi

on 8 in D:\programming\java\YourSafe/AndroidManifest.xml

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: D:\programming\jav

a\YourSafe/jni/Android.mk

F:/360Apps/Android/android-ndk-r10/build/core/add-application.mk:209: *** Androi

d NDK: Aborting...    .  Stop.

D:\programming\java\YourSafe>ndk-build

Android NDK: WARNING: APP_PLATFORM android-15 is larger than android:minSdkVersi

on 8 in D:\programming\java\YourSafe/AndroidManifest.xml

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: D:\programming\jav

a\YourSafe/jni/Android.mk

F:/360Apps/Android/android-ndk-r10/build/core/add-application.mk:209: *** Androi

d NDK: Aborting...    .  Stop.

D:\programming\java\YourSafe>ndk-build

Android NDK: WARNING: APP_PLATFORM android-15 is larger than android:minSdkVersi

on 8 in D:\programming\java\YourSafe/AndroidManifest.xml

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: D:\programming\jav

a\YourSafe/jni/Android.mk

F:/360Apps/Android/android-ndk-r10/build/core/add-application.mk:209: *** Androi

d NDK: Aborting...    .  Stop.

D:\programming\java\YourSafe>ndk-build

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: D:\programming\jav

a\YourSafe/jni/Android.mk

F:/360Apps/Android/android-ndk-r10/build/core/add-application.mk:209: *** Androi

d NDK: Aborting...    .  Stop.

D:\programming\java\YourSafe>ndk-build

Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: D:\programming\jav

a\YourSafe/jni/Android.mk

F:/360Apps/Android/android-ndk-r10/build/core/add-application.mk:209: *** Androi

d NDK: Aborting...    .  Stop.

D:\programming\java\YourSafe>ndk-build

[armeabi] Compile++ thumb: hello <= hello.cpp

D:\programming\java\YourSafe/jni/hello.cpp: In function '_jstring* Java_com_exam

ple_yoursafe_Hello_hello(JNIEnv*, jclass)':

D:\programming\java\YourSafe/jni/hello.cpp:6:9: error: 'env' was not declared in

 this scope

make.exe: *** [D:\programming\java\YourSafe/obj/local/armeabi/objs/hello/hello.o

] Error 1

D:\programming\java\YourSafe>ndk-build

[armeabi] Compile++ thumb: hello <= hello.cpp

[armeabi] StaticLibrary  : libstdc++.a

[armeabi] SharedLibrary  : libhello.so

[armeabi] Install        : libhello.so => libs/armeabi/libhello.so

编译前配置的mk文件:Android.mk(android的a要大写)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello

LOCAL_SRC_FILES := hello.cpp

include $(BUILD_SHARED_LIBRARY)

编译过程:

编译class文件得到jni文件。

把编译好jni的c的头文件放在项目根目录jni文件夹下,没有jni文件夹就自己创建一个。

接下来,编译得到so文件,在项目根路径下编译啊(也许还要设置NDK_PROJECT_PATH环境变量指向你的项目根路径!)

必须在项目的根路径编译:parentPath\ndk-build(ndk-build为ndk下文件配置到环境变量path中可随处使用)

eg.D:\androidProject\ndk-build

接下来就是自动编译了,是在windows下编译

--遇到问题上面已经显示了:

解决问题1:版本问题:本jni编译器只支持android-15以上,所以设置AndroidManifest.xml文件中的

<uses-sdk

        android:minSdkVersion="15"  android:targetSdkVersion="21" />//设置minSdkVersion到合适版本

--遇到问题2:APP_BUILD_SCRIPT points to an unknown file就是Android.xml文件名a要大写。

--遇到问题3:代码错误,漏写变量啊,错误函数啊,这个编译器应该会指出,照提示修改。

编译后会有obj文件夹,运行程序会自动将so文件加载到libs文件下。

编译后obj文件路径:

obj/local/armeabi/objs

--hello

--hello.o

--hello.o.d

--libhello.so

--libstdc++.a

编译后的so文件路径:

libs/armeabi/libhello.so

最后在手机运行成功调用jni函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: