Нет правила для создания цели — новое в Android NDK

Я пытаюсь написать базовое приложение NDK, чтобы понять, как работает NDK. У меня есть текстовое представление и кнопка в MainActivity и библиотечный класс HelloWorldLib.java, который имеет статическую нативную функцию helloWorld. Я создал файл заголовка, скопировал его и создал файл «.c» в папке jni.

Когда я строю через ndk-build, я получаю сообщение об ошибке «Нет правил для создания цели». Я проверил много сообщений и ответил, но ничего не получилось.

Я включил пустой файл test.c, как указано в приведенной ниже ссылке, и смог построить проект. Однако, когда я запустил свое приложение, я получил ошибку, что «родная реализация не найдена», что странно, потому что у меня есть реализация. < br> 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.

Я не уверен, где я ошибаюсь, но любая помощь будет принята с благодарностью.

Спасибо. ГБ.


person GAG'sB    schedule 21.09.2014    source источник
comment
Извините, это было скрыто от радаров больше года. Надеюсь, ваша проблема давно решена. Из вашего сообщения неясно, где находится файл com.example.androidndk_HelloWorldLib.c в файловой системе, но ndk-build ищет его рядом с Android.mk.   -  person Alex Cohn    schedule 06.11.2015


Ответы (1)


Здесь

LOCAL_SRC_FILES := com.example.androidndk_HelloWorldLib.c

LOCAL_MODULE := com.example.androidndk_HelloWorldLib

изменить на

FILE_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)

LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

Попробуй.

person KongJing    schedule 18.02.2017