咳咳,虽然现在ADT有点土埋半截的意思,但是在某些特殊情况下还是要用到它,其中NDK的开发是避免不了的。
今日为了某些特殊的理由,本人要做NDK开发,AndroidStudio的NDK又有点不适用。在跌跌撞撞两天后终于搞清楚了现时在Eclipse下创建NDK项目的方法。
开发环境:
Windows10企业版
Eclipse NEON.3
NDK 15.0.4075724
首先,在系统环境变量中,将NDK的路径写入PATH中,并在Eclipse中设置NDK的路径,具体方法不累述了。
打开Eclipse,如Android: NDK编程入门笔记中所说的,创建一个Android项目,注意Android版本号请写NDK中存在的,如下图
不要选个android-25,那样编译不过的。
项目设置可做成这样
其中的java代码照抄即可。
然后将项目编译一下以生成.class文件。
在项目的src目录下,打开一个命令行窗口,输入:
javah -d ../jni com.example.hellojni.HelloJni
其中-d ../jni是表示将生成的.h文件放入 {项目目录}/jni下,com.example.hellojni.HelloJni则为{BUNDLE}.{项目名}.{class文件名}
之后在{项目目录}/jni下添加C/C++源码文件。我看了一些以前的文章,说非要将.cpp改成.c(可能是作者的误解),应该不是安卓开发包的限制(否则Cocos2dx那些老版本是怎么实现的?)
hello-jni.cpp:
#include <string.h>
#include <jni.h>
extern "C" {
/* This is a trivial JNI example where we use a native method
* to return a new VM String. See the corresponding Java source
* file located at:
*
* apps/samples/hello-jni/project/src/com/example/HelloJni/HelloJni.java
*/
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return (env)->NewStringUTF("Hello from JNI !");
}
};
此处代码与上面所引用的有改动,请以我这个代码为准。
在{项目目录}/jni下添加Android,mk:
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp
include $(BUILD_SHARED_LIBRARY)
在{项目目录}下以命令窗口中执行ndk-build来编译C++代码:
最后在Eclipse中运行项目就可以了:
当然这样做的缺陷是每改动一次CPP都要在命令窗口中执行一次ndk-build,不知Cocos2dx2.x.x的添加编译参数的设置方法能不能解决这个问题
这个工程导入Android Studio后会出现
Your project contains C++ files but it is not using a supported native build system
错误,
添加
sourceSets {
main {
jni.srcDirs = []
}
}
即可。