私はmakeシステムの不満の中で、私は何年も前にすべてのコードを単純に混乱させて作業しているネイティブプロジェクトを持っています。私はプロジェクトを適切にgradle-experimentalに移植しようとしましたが、それはまだ2.5年後の災害です。私は今、再構成された(gradle-experimentalの)プロジェクトでAndroid.mkシステムが動作するようにしようとしています。Android ndkネストされたモジュール
- JPEG(フルネイティブ)
- プロセッサ(フルネイティブ、JPEGに依存)
- ライブラリ(JNI、プロセッサおよびJPEGに依存)
:ここ は、組織の
module
-jni (contains Application.mk, Android.mk)
-jpeg
--src
---main
----jni
-----Android.mk (and source co-located)
-processor
--src
----main
-----jni
------Android.mk
------/processor(source)
-library
--src
----main
-----java
-----jni
-----Android.mk (and source co-located)
私はこれを平らにすることができます私はmakeファイルを使用していますが、2020年にはいつかはAndroid Studioがネイティブをサポートしているので、現在のプロジェクト形式を維持すると思いました。ここで
は私のメイクファイルは、次のとおりです。JNI
モジュール/:
LOCAL_PATH := $(call my-dir)
STARTUP_DIR := $(LOCAL_PATH)
include $(STARTUP_DIR)/../jpeg/src/main/jni/Android.mk
include $(STARTUP_DIR)/../processor/src/main/jni/Android.mk
include $(STARTUP_DIR)/../library/src/main/jni/Android.mk
include $(CLEAR_VARS)
JPEG/JNI:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_SRC_FILES := [truncated]
LOCAL_CFLAGS += -DAVOID_TABLES
LOCAL_CFLAGS += -O3 -fstrict-aliasing -fprefetch-loop-arrays
#LOCAL_CFLAGS += -march=armv6j
# enable tile based decode
LOCAL_CFLAGS += -DANDROID_TILE_BASED_DECODE
ifeq ($(TARGET_ARCH_VARIANT),x86-atom)
LOCAL_CFLAGS += -DANDROID_INTELSSE2_IDCT
LOCAL_SRC_FILES += jidctintelsse.c
endif
# enable armv6 idct assembly
ifeq ($(strip $(TARGET_ARCH)),arm)
LOCAL_CFLAGS += -DANDROID_ARMV6_IDCT
endif
# use mips assembler IDCT implementation if MIPS DSP-ASE is present
ifeq ($(strip $(TARGET_ARCH)),mips)
ifeq ($(strip $(ARCH_MIPS_HAS_DSP)),true)
LOCAL_CFLAGS += -DANDROID_MIPS_IDCT
LOCAL_SRC_FILES += \
mips_jidctfst.c \
mips_idct_le.S
endif
endif
LOCAL_MODULE := libjpeg
include $(BUILD_STATIC_LIBRARY)
プロセッサ/ JNI
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS += -DUSE_JPEG
LOCAL_STATIC_LIBRARIES += libjpeg
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../jpeg/src/main/jni
LOCAL_MODULE := processor
LOCAL_SRC_FILES := [truncated]
LOCAL_C_INCLUDES += [truncated]
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/processor/include
LOCAL_LDLIBS += -lz
include $(BUILD_SHARED_LIBRARY)
ndk-buildを実行すると、プロセッサビルド時にjpegが正常に構築されます。私は私がやっている感じを持っている「
`jpeg_std_error(jpeg_error_mgr *)への未定義参照
を:それはしかし、のような未定義の参照を(プロセッサ)で任意のコード参照のjpegを構築するために失敗します。 LOCAL_STATIC_LIBRARIES += libjpeg
が正しくインポートされないように、親のAndroid.mkを設定する際に何らかの問題があります。誰でも私がここで間違っているかもしれないことを知っていますか?
「プル」とはどういう意味ですか? – rmtheis
私はextern "c"を追加したアンドロイド互換のjpeg-turboライブラリを使用していましたが、何年も後にgradle-experimentalに移植しようとしたときに正しいブランチを忘れることを完全に忘れました。それは私が "間違ったものを引っ張った" – Anthony