Я пытаюсь написать базовое приложение NDK, чтобы понять, как работает NDK. У меня есть текстовое представление и кнопка в MainActivity и библиотечном классе HelloWorldLib.java, которые имеют статическую собственную функцию helloWorld. Я создал файл заголовка, скопировал его и создал файл «.c» в папке jni.Нет правила для создания цели - новое в Android NDK
Когда я строю через ndk-build, я получаю сообщение об ошибке «no rule to make target». Я проверил множество сообщений и ответил, но ничего не получилось.
Я включил пустой файл test.c, как указано в приведенной ниже ссылке, и смог построить проект. Однако, когда я запускал свое приложение, я получил сообщение об ошибке «нет встроенной реализации», которая является bizzare, потому что у меня есть реализация.
https://code.google.com/p/android/issues/detail?id=66937
OnClick from where HelloWorldLib is called.
public void onClick(View v) {
// TODO Auto-generated method stub
String inNDK = HelloWorldLib.helloWorld();
tv.setText(inNDK);
}
HelloWorldLib where native is funciton is defined.
public class HelloWorldLib {
public native static String helloWorld();
static{
System.loadLibrary("com.example.androidndk_HelloWorldLib");
}
}
header file created by Javah -jni
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_androidndk_HelloWorldLib */
#ifndef _Included_com_example_androidndk_HelloWorldLib
#define _Included_com_example_androidndk_HelloWorldLib
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_androidndk_HelloWorldLib
* Method: helloWorld
* Signature:()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_androidndk_HelloWorldLib_helloWorld
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
C file copied from .h and then modified.
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <com_example_androidndk_HelloWorldLib.h>
#include <string.h>
extern "C" {
JNIEXPORT jstring JNICALL Java_com_example_androidndk_HelloWorldLib_helloWorld
(JNIEnv *env, jclass clazz){
return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI");
}
Andoid.mk file
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := com.example.androidndk_HelloWorldLib.c
LOCAL_MODULE := com.example.androidndk_HelloWorldLib
include $(BUILD_SHARED_LIBRARY)
The error i am getting in the command prompt is shown below:
D:\Users\gabhatia\Desktop\Android SDK\MyWorkspace\AndroidNDK>ndk-build
make.exe: *** No rule to make target `jni/com.example.androidndk_HelloWorldLib.c
', needed by `obj/local/x86/objs/com.example.androidndk_HelloWorldLib/com.exampl
e.androidndk_HelloWorldLib.o'. Stop.
Я не уверен, где я получаю неправильно, но любая помощь будет принята с благодарностью.
Спасибо. ГБ.
Извините, что вы попали под радар более года. Надеюсь, ваша проблема давно решена. Из вашего сообщения неясно, где файл 'com.example.androidndk_HelloWorldLib.c' живет в файловой системе, но ** ndk-build ** ищет его прямо рядом с ** Android.mk **. –