commit 43f369d94bb31bdbdee19174539e9b65d7612284 Author: lucius Date: Sat Aug 30 22:15:25 2025 +0800 新增:实现testHello()),生成libcomclientjni.so,供APP调用。 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02e88ee --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/build/libs/ +/build/obj/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3cef64c --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +## V1.0.1 + +### 新增: + +实现testHello()),生成libcomclientjni.so,供APP调用。 diff --git a/build/Ndk_Android.mk b/build/Ndk_Android.mk new file mode 100644 index 0000000..34561ab --- /dev/null +++ b/build/Ndk_Android.mk @@ -0,0 +1,18 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_C_INCLUDES := $(LOCAL_PATH)/../code/ + +LOCAL_LDLIBS := -llog -lc + +LOCAL_SRC_FILES := \ + ../code/comclientjni.cpp + +LOCAL_CFLAGS := -D__OS_ANDROID +LOCAL_CPPFLAGS += -std=c++11 -android + +LOCAL_MODULE := comclientjni + +# LOCAL_LDFLAGS := -Wl,--hash-style=both + +include $(BUILD_SHARED_LIBRARY) diff --git a/build/Ndk_Application.mk b/build/Ndk_Application.mk new file mode 100644 index 0000000..6a4b1f9 --- /dev/null +++ b/build/Ndk_Application.mk @@ -0,0 +1,5 @@ +APP_STL:=gnustl_static +#APP_STL:=c++_static +APP_ABI:=armeabi-v7a +APP_PLATFORM:=android-23 +APP_BUILD_SCRIPT:=Ndk_Android.mk diff --git a/build/ndk_make.sh b/build/ndk_make.sh new file mode 100644 index 0000000..a22201f --- /dev/null +++ b/build/ndk_make.sh @@ -0,0 +1,99 @@ +#!/bin/bash + +source /opt/ndk/env/ndk_env.sh + +# 定义颜色 +RED="\033[0;31m" +GREEN="\033[0;32m" +YELLOW="\033[1;33m" +BLUE="\033[0;34m" +RESET="\033[0m" + +# 路径 +NDK_PROJECT_PATH=$(pwd) +APP_MK="./Ndk_Application.mk" +ANDROID_MK="./Ndk_Android.mk" +FIRMWARE_PATH="obj/local/armeabi-v7a/myapp" +DEVICE_DATA="/data/" +DEVICE_IP="" + +clean() { + echo -e "${YELLOW}Cleaning up...${RESET}" + ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=$APP_MK APP_BUILD_SCRIPT=$ANDROID_MK clean + echo -e "${YELLOW}Removing obj/ and libs/ directories...${RESET}" + rm -rf obj/ libs/ + sync + echo -e "${GREEN}Cleaned up.${RESET}" +} + +build_only() { + echo -e "${BLUE}Building myapp...${RESET}" + ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=$APP_MK APP_BUILD_SCRIPT=$ANDROID_MK + echo -e "${GREEN}Only build completed successfully.${RESET}" +} + +push_only() { + if [ -z "$DEVICE_IP" ]; then + echo -e "${RED}Error: No device IP provided. Use -p ${RESET}" + exit 1 + fi + echo -e "${BLUE}Connecting to device $DEVICE_IP...${RESET}" + adb connect $DEVICE_IP + if [ $? -ne 0 ]; then + echo -e "${RED}Failed to connect to device $DEVICE_IP${RESET}" + exit 1 + fi + + echo -e "${BLUE}Pushing myapp to $DEVICE_DATA...${RESET}" + adb -s $DEVICE_IP push $FIRMWARE_PATH $DEVICE_DATA + if [ $? -ne 0 ]; then + echo -e "${RED}Failed to push myapp to $DEVICE_DATA${RESET}" + exit 1 + fi + + echo -e "${GREEN}Push completed successfully.${RESET}" +} + +build_and_push() { + build_only + push_only +} + +show_help() { + echo -e "${YELLOW}Usage: $0 [options]${RESET}" + echo + echo "Options:" + echo -e " ${BLUE}-c${RESET} Clean project (remove obj/ and libs/)" + echo -e " ${BLUE}-p ${RESET} Push myapp to device with given IP" + echo -e " ${BLUE}-bp ${RESET} Build and push to device with given IP" + echo -e " ${BLUE}-h${RESET} Show this help message" + echo + echo -e "${YELLOW}Default:${RESET} If no options are given, only build the project." +} + +# 参数解析 +if [ $# -eq 0 ]; then + build_only + exit 0 +fi + +case "$1" in + -c) + clean + ;; + -p) + DEVICE_IP="$2" + push_only + ;; + -bp) + DEVICE_IP="$2" + build_and_push + ;; + -h) + show_help + ;; + *) + show_help + exit 1 + ;; +esac diff --git a/code/com_myjni_mynative_MyClientCmd.h b/code/com_myjni_mynative_MyClientCmd.h new file mode 100644 index 0000000..6bb3a06 --- /dev/null +++ b/code/com_myjni_mynative_MyClientCmd.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include "jni.h" +/* Header for class com_myjni_mynative_MyClientCmd */ + +#ifndef _Included_com_myjni_mynative_MyClientCmd +#define _Included_com_myjni_mynative_MyClientCmd +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: com_myjni_mynative_MyClientCmd + * Method: testHello + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_com_myjni_mynative_MyClientCmd_testHello + (JNIEnv *, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/code/comclientjni.cpp b/code/comclientjni.cpp new file mode 100644 index 0000000..698987f --- /dev/null +++ b/code/comclientjni.cpp @@ -0,0 +1,12 @@ +#include "com_myjni_mynative_MyClientCmd.h" +#include +#include +#include + +#define LOG_TAG "MyClientCmd" + +JNIEXPORT void JNICALL Java_com_myjni_mynative_MyClientCmd_testHello(JNIEnv *, jobject) +{ + printf("this is C++ print"); + __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "this is C++ print"); +} \ No newline at end of file