java - studio - No hay regla para hacer NDK objetivo
jni java android (2)
Creo que es cierto para definir la ruta local después de incluir sub makefiles.
LOCAL_PATH := $(call my-dir)
MY_PATH := $(LOCAL_PATH)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
LOCAL_PATH := $(MY_PATH)
LOCAL_LDLIBS := -llog -ldl
LOCAL_MODULE := rmsdk
LOCAL_SRC_FILES := native.c
include $(BUILD_SHARED_LIBRARY)
Se ve mal Creo que puedes intentar esto:
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
LOCAL_PATH := $(call my-dir)
LOCAL_LDLIBS := -llog -ldl
LOCAL_MODULE := rmsdk
LOCAL_SRC_FILES := native.c
include $(BUILD_SHARED_LIBRARY)
Espero eso ayude.
Estoy compilando fuentes nativas y agregando las dependencias con .a libs y esos archivos de encabezado relativos con la siguiente estructura.
/ jni /
Android.mk
LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := ndk1
LOCAL_SRC_FILES := native.c
LOCAL_STATIC_LIBRARY := mschema
include $(BUILD_SHARED_LIBRARY)
nativo.c
/ jni / prereqs /
Android.mk
LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
--Utilizado para llamar a las subcarpetas mk archivos
/ jni / prereqs / mschema /
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=mschema
LOCAL_SRC_FILES :=libmschema.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
libmschema.a
/ jni / prereqs / mschema / include
Archivos de encabezado. (.h)
Pero al intentar ndk-build (NDK5) obtuve el siguiente error.
marcos@marcos-AY675AA-AC4-s5320br:~/dev/workspace/rmsdk.native.wraper$ ndk-buildmake:
*** No rule to make target `/home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c'', needed by `/home/marcos/dev/workspace/rmsdk.native.wraper/obj/local/armeabi/objs/ndk1/native.o''. Stop.
Mientras escribía, noté que el error es sobre /home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c'' and actually this file is under
/ home / marcos / dev / workspace / rmsdk. native.wraper / jni / native.c '', ¿qué hay de malo en mis archivos make?
El problema podría evitarse cambiando el primer Android.mk a lo siguiente:
LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE := ndk1
LOCAL_SRC_FILES := native.c
LOCAL_STATIC_LIBRARY := mschema
include $(BUILD_SHARED_LIBRARY)
Pero se ve mal. ¿Hay un mejor enfoque?
Desde los documentos en NDK 5, la solución es crear una variable local.
my-dir Devuelve la ruta del último Makefile incluido, que normalmente es el directorio actual de Android.mk. Esto es útil para definir LOCAL_PATH al inicio de tu Android.mk como con:
LOCAL_PATH := $(call my-dir)
IMPORTANT NOTE: Due to the way GNU Make works, this really returns
the path of the *last* *included* *Makefile* during the parsing of
build scripts. Do not call my-dir after including another file.
Entonces ... para resolver este problema, cambio mi Android.mk a lo siguiente.
LOCAL_PATH := $(call my-dir)
MY_PATH := $(LOCAL_PATH)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
LOCAL_PATH := $(MY_PATH)
LOCAL_LDLIBS := -llog -ldl
LOCAL_MODULE := rmsdk
LOCAL_SRC_FILES := native.c
include $(BUILD_SHARED_LIBRARY)
Y sus obras.