Random attempt at cleaning things up

This commit is contained in:
Kevin Dewald 2025-04-17 17:17:35 -07:00
parent 4c423a1e05
commit 23067a7f87
8 changed files with 214 additions and 20 deletions

View File

@ -259,7 +259,11 @@ jobs:
merge-multiple: true
- name: List all artifacts
run: find artifacts -type f -ls | sort
run: find artifacts -type f -ls
- name: Remove unwanted artifacts
run: |
rm -rf artifacts/libsimplejavable*
- name: Upload artifacts to release
uses: svenstaro/upload-release-action@v2

View File

@ -269,7 +269,35 @@ elseif(SIMPLEBLE_BACKEND_MACOS)
elseif(SIMPLEBLE_BACKEND_ANDROID)
message(STATUS "Configuring for Android")
include_directories(${ANDROID_NDK}/sysroot/usr/include)
# NOTE, these are the options sent by gradle when calling externalNativeBuild, cmake
# -DCMAKE_SYSTEM_NAME=Android \
# -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
# -DCMAKE_SYSTEM_VERSION=31 \
# -DANDROID_PLATFORM=android-31 \
# -DANDROID_ABI=armeabi-v7a \
# -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a \
# -DANDROID_NDK=/Users/kdewald/Library/Android/sdk/ndk/27.0.12077973 \
# -DCMAKE_ANDROID_NDK=/Users/kdewald/Library/Android/sdk/ndk/27.0.12077973 \
# -DCMAKE_TOOLCHAIN_FILE=/Users/kdewald/Library/Android/sdk/ndk/27.0.12077973/build/cmake/android.toolchain.cmake \
# -DCMAKE_MAKE_PROGRAM=/Users/kdewald/Library/Android/sdk/cmake/3.22.1/bin/ninja \
# -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/kdewald/Workspaces/Personal/SimpleBLE/simpledroidble/simpledroidble/build/intermediates/cxx/Debug/2m126g5n/obj/armeabi-v7a \
# -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=/Users/kdewald/Workspaces/Personal/SimpleBLE/simpledroidble/simpledroidble/build/intermediates/cxx/Debug/2m126g5n/obj/armeabi-v7a \
# -DCMAKE_BUILD_TYPE=Debug \
# -B/Users/kdewald/Workspaces/Personal/SimpleBLE/simpledroidble/simpledroidble/.cxx/Debug/2m126g5n/armeabi-v7a \
# -GNinja
message(STATUS "ANDROID_NDK: ${ANDROID_NDK}")
message(STATUS "ANDROID_NATIVE_API_LEVEL: ${ANDROID_NATIVE_API_LEVEL}")
message(STATUS "ANDROID_ABI: ${ANDROID_ABI}")
message(STATUS "ANDROID_PLATFORM: ${ANDROID_PLATFORM}")
message(STATUS "CMAKE_ANDROID_NDK: ${CMAKE_ANDROID_NDK}")
message(STATUS "ANDROID_SDK_ROOT: ${ANDROID_SDK_ROOT}")
message(STATUS "CMAKE_ANDROID_API: ${CMAKE_ANDROID_API}")
# Throw an error to stop the build
message(FATAL_ERROR "Build stopped intentionally. Please check your Android configuration.")
# include_directories(${ANDROID_NDK}/sysroot/usr/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/backends/android)
add_compile_options(-DANDROID -D__ANDROID_API__=${ANDROID_NATIVE_API_LEVEL})
@ -298,6 +326,76 @@ elseif(SIMPLEBLE_BACKEND_ANDROID)
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/android/jni/List.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/backends/android/jni/Set.cpp)
target_link_libraries(simpleble PUBLIC android nativehelper log)
# Build the simpleble-bridge library
# include(UseJava)
# find_package(Java COMPONENTS Development REQUIRED)
# set(ANDROID_SDK_ROOT ${CMAKE_ANDROID_NDK}/../../)
# message(STATUS "ANDROID_SDK_ROOT: ${ANDROID_SDK_ROOT}")
# set(ANDROID_JAR ${ANDROID_SDK_ROOT}/platforms/android-${CMAKE_ANDROID_API}/android.jar)
# message(STATUS "ANDROID_JAR: ${ANDROID_JAR}")
# set(JAVA_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/backends/android/simpleble-bridge/src/main")
# set(OUTPUT_DIR "${CMAKE_BINARY_DIR}/aar_output")
# set(AAR_NAME "simpleble-bridge.aar")
# set(JAVA_FILES
# "${JAVA_SRC_DIR}/java/org/simpleble/android/bridge/BluetoothGattCallback.java"
# "${JAVA_SRC_DIR}/java/org/simpleble/android/bridge/ScanCallback.java"
# )
# # Create classes.jar using add_jar
# add_jar(
# simpleble_classes
# SOURCES ${JAVA_FILES}
# OUTPUT_DIR ${OUTPUT_DIR}
# INCLUDE_JARS ${ANDROID_JAR}
# )
# # Copy AndroidManifest.xml
# add_custom_command(
# OUTPUT ${OUTPUT_DIR}/AndroidManifest.xml
# COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
# COMMAND ${CMAKE_COMMAND} -E copy
# ${JAVA_SRC_DIR}/AndroidManifest.xml
# ${OUTPUT_DIR}/AndroidManifest.xml
# DEPENDS ${JAVA_SRC_DIR}/AndroidManifest.xml
# COMMENT "Copying AndroidManifest.xml"
# )
# # Create empty R.txt (no resources)
# add_custom_command(
# OUTPUT ${OUTPUT_DIR}/R.txt
# COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT_DIR}/R.txt
# COMMENT "Creating empty R.txt"
# )
# # Package AAR
# add_custom_command(
# OUTPUT ${OUTPUT_DIR}/${AAR_NAME}
# COMMAND ${CMAKE_COMMAND} -E remove -f ${OUTPUT_DIR}/${AAR_NAME}
# COMMAND ${CMAKE_COMMAND} -E chdir ${OUTPUT_DIR}
# zip -j ${AAR_NAME}
# AndroidManifest.xml
# simpleble_classes.jar
# R.txt
# DEPENDS
# simpleble_classes
# ${OUTPUT_DIR}/AndroidManifest.xml
# ${OUTPUT_DIR}/R.txt
# COMMENT "Packaging ${AAR_NAME}"
# )
# # Define custom target
# add_custom_target(
# build_aar ALL
# DEPENDS ${OUTPUT_DIR}/${AAR_NAME}
# COMMENT "Building ${AAR_NAME}"
# )
endif()
apply_build_options(simpleble

View File

@ -4,8 +4,14 @@
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings>
</option>

View File

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager">

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

View File

@ -3,6 +3,65 @@ plugins {
alias(libs.plugins.jetbrainsKotlinAndroid)
}
val androidExtension = project.extensions.getByType<com.android.build.gradle.LibraryExtension>()
val androidSdkDir = androidExtension.sdkDirectory.absolutePath
val androidNdkDir = androidExtension.ndkDirectory.absolutePath
val cmakePath = androidExtension.cmake.get().path
val cmakeVersion = androidExtension.cmake.get().version
val simpleDroidBleCompileSdkVersion = 35
val simpleDroidBleMinSdkVersion = 31
// Define the path to the root simpleble CMake project
val simplebleRootPath = rootProject.projectDir.resolve("../simpleble").canonicalPath
// Define where the custom CMake task will build the AAR
val simplebleBuildPath = layout.buildDirectory.dir("build_simpleble_root").get().asFile
// Define the expected output path of the AAR from the custom build
val simplebleAarPath = layout.buildDirectory.dir("build_simpleble_root/aar_output/simpleble-bridge.aar").get().asFile.absolutePath
// Task to build the simpleble-bridge.aar using the root CMakeLists.txt
tasks.register<Exec>("buildSimpleBleAar") {
description = "Builds simpleble-bridge.aar from the root simpleble project"
group = "build"
// // Define inputs and outputs for Gradle's up-to-date checking
// inputs.dir(simplebleRootPath)
// // Declare dependency on NDK and SDK directories for up-to-date checks
// inputs.dir(sdkDir)
// inputs.dir(ndkDir)
outputs.file(simplebleAarPath)
// CMake Configuration Step
commandLine(
"cmake",
"-S", simplebleRootPath, // Source directory
"-B", simplebleBuildPath,
"-DCMAKE_SYSTEM_NAME=Android",
"-DCMAKE_ANDROID_NDK=$androidNdkDir",
"-DCMAKE_SYSTEM_VERSION=$simpleDroidBleMinSdkVersion",
)
// CMake Build Step (runs after configuration)
doLast {
exec {
workingDir(simplebleRootPath)
commandLine(
"cmake",
"--build", simplebleBuildPath.absolutePath,
"--target", "build_aar", // Build the specific AAR target
"--config", "Release" // Or Debug
)
}
}
}
// Make the standard build process depend on our custom AAR build task
tasks.named("preBuild") {
dependsOn("buildSimpleBleAar")
}
android {
namespace = "org.simpleble.android"
compileSdk = 35
@ -49,4 +108,10 @@ dependencies {
//noinspection UseTomlInstead
implementation("org.simpleble.android.bridge:simpleble-bridge")
// // Depend on the AAR file produced by the custom buildSimpleBleAar task
// implementation(files(simplebleAarPath)) {
// // Ensure the dependency resolution waits for the task to complete
// builtBy("buildSimpleBleAar")
// }
}

View File

@ -31,6 +31,9 @@ add_library(
android_utils.cpp
)
# Explicitly state that the JNI library depends on the AAR being built
# add_dependencies(${CMAKE_PROJECT_NAME} build_aar)
set_target_properties(
${CMAKE_PROJECT_NAME} PROPERTIES
CXX_STANDARD 17

View File

@ -60,7 +60,7 @@ eval set -- "$PARAMS"
PROJECT_ROOT=$(realpath $(dirname `realpath $0`)/..)
SOURCE_PATH=$PROJECT_ROOT/simpleble
BUILD_PATH=$PROJECT_ROOT/build_simpleble_android
INSTALL_PATH=$BUILD_PATH/install
INSTALL_PATH=$PROJECT_ROOT/install_simpleble_android
EXAMPLE_BUILD_PATH=$PROJECT_ROOT/build_simpleble_android_examples
EXAMPLE_SOURCE_PATH=$PROJECT_ROOT/examples/simpleble
@ -68,6 +68,7 @@ EXAMPLE_SOURCE_PATH=$PROJECT_ROOT/examples/simpleble
# If FLAG_CLEAN is set, clean the build directory
if [[ ! -z "$FLAG_CLEAN" ]]; then
rm -rf $BUILD_PATH
rm -rf $INSTALL_PATH
rm -rf $EXAMPLE_BUILD_PATH
fi
@ -78,27 +79,28 @@ if [ -z "$ANDROID_NDK_HOME" ]; then
fi
# These are some hardcoded variables used for my test process. You can change them to fit your needs.
ANDROID_ARCH_ABI="armeabi-v7a"
ANDROID_API=21
ANDROID_ARCH_ABI="arm64-v8a"
ANDROID_API=31
# NOTE: Also look at ANDROID_STL_TYPE
ANDROID_ARGS="-DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_NDK=$ANDROID_NDK_HOME -DCMAKE_ANDROID_ARCH_ABI=$ANDROID_ARCH_ABI -DCMAKE_ANDROID_API=$ANDROID_API"
# -DCMAKE_SYSTEM_VERSION=31
ANDROID_ARGS="-DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_NDK=$ANDROID_NDK_HOME -DCMAKE_ANDROID_ARCH_ABI=$ANDROID_ARCH_ABI -DCMAKE_ANDROID_API=$ANDROID_API -DSIMPLEBLE_EXCLUDE_C=ON"
cmake -H$SOURCE_PATH -B $BUILD_PATH $ANDROID_ARGS
cmake --build $BUILD_PATH -j7
cmake --install $BUILD_PATH --prefix "${INSTALL_PATH}"
if [[ ! -z "$FLAG_EXAMPLE" ]]; then
cmake -H$EXAMPLE_SOURCE_PATH -B $EXAMPLE_BUILD_PATH $ANDROID_ARGS
cmake --build $EXAMPLE_BUILD_PATH -j7
# if [[ ! -z "$FLAG_EXAMPLE" ]]; then
# cmake -H$EXAMPLE_SOURCE_PATH -B $EXAMPLE_BUILD_PATH $ANDROID_ARGS
# cmake --build $EXAMPLE_BUILD_PATH -j7
if [[ ! -z "$FLAG_DEPLOY" ]]; then
adb shell rm -rf /data/local/tmp/simpleble
adb shell mkdir /data/local/tmp/simpleble
adb push $EXAMPLE_BUILD_PATH/bin/* /data/local/tmp/simpleble
adb shell chmod +x /data/local/tmp/simpleble/*
fi
# if [[ ! -z "$FLAG_DEPLOY" ]]; then
# adb shell rm -rf /data/local/tmp/simpleble
# adb shell mkdir /data/local/tmp/simpleble
# adb push $EXAMPLE_BUILD_PATH/bin/* /data/local/tmp/simpleble
# adb shell chmod +x /data/local/tmp/simpleble/*
# fi
if [[ ! -z "$FLAG_RUN" ]]; then
adb shell /data/local/tmp/simpleble/$FLAG_RUN
fi
fi
# if [[ ! -z "$FLAG_RUN" ]]; then
# adb shell /data/local/tmp/simpleble/$FLAG_RUN
# fi
# fi