新增:实现testHello()),生成libcomclientjni.so,供APP调用。

This commit is contained in:
2025-08-30 22:15:25 +08:00
commit 43f369d94b
7 changed files with 162 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/build/libs/
/build/obj/

5
README.md Normal file
View File

@ -0,0 +1,5 @@
## V1.0.1
### 新增:
实现testHello())生成libcomclientjni.so供APP调用。

18
build/Ndk_Android.mk Normal file
View File

@ -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)

5
build/Ndk_Application.mk Normal file
View File

@ -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

99
build/ndk_make.sh Normal file
View File

@ -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 <IP>${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 <IP>${RESET} Push myapp to device with given IP"
echo -e " ${BLUE}-bp <IP>${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

View File

@ -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

12
code/comclientjni.cpp Normal file
View File

@ -0,0 +1,12 @@
#include "com_myjni_mynative_MyClientCmd.h"
#include <iostream>
#include <stdio.h>
#include <android/log.h>
#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");
}