2014-09-21 3 views
2

Я пытаюсь написать базовое приложение 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. 

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

Спасибо. ГБ.

+1

Извините, что вы попали под радар более года. Надеюсь, ваша проблема давно решена. Из вашего сообщения неясно, где файл 'com.example.androidndk_HelloWorldLib.c' живет в файловой системе, но ** ndk-build ** ищет его прямо рядом с ** Android.mk **. –

ответ

0

Здесь

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)/%=%)

Попробуйте.

Смежные вопросы