diff --git a/build.gradle b/build.gradle
index 2b8c0ca1..180d8004 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,7 +9,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:8.7.3'
+ classpath 'com.android.tools.build:gradle:8.10.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
@@ -26,12 +26,12 @@ allprojects {
ext {
android = [
- compileSdkVersion: 30,
+ compileSdkVersion: 35, // Updated to support Android 15 for 16KB page sizes
buildToolsVersion: '34.0.0',
minSdkVersion : 21,
targetSdkVersion : 25, // higher target version needs more storage permission request.
versionCode : 2,
- versionName : "3.1.0",
+ versionName : "3.1.1",
applicationId : "org.wysaid.cgeDemo",
appcompatX : "1.2.0",
ndkVersion : "26.3.11579264",
diff --git a/cgeDemo/build.gradle b/cgeDemo/build.gradle
index 9472762c..dbf07ed4 100644
--- a/cgeDemo/build.gradle
+++ b/cgeDemo/build.gradle
@@ -11,6 +11,10 @@ def usingCMakeCompileDebug() {
return gradle.ext != null && gradle.ext.has("usingCMakeCompileDebug") && gradle.ext.usingCMakeCompileDebug;
}
+def enable16kPageSizes() {
+ return gradle.ext != null && gradle.ext.has("enable16kPageSizes") && gradle.ext.enable16kPageSizes;
+}
+
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
@@ -22,7 +26,8 @@ android {
defaultConfig {
applicationId rootProject.ext.android.applicationId
minSdkVersion rootProject.ext.android.minSdkVersion
- targetSdkVersion rootProject.ext.android.targetSdkVersion
+ // Use Android 15+ (API 35) when 16KB page sizes are enabled, otherwise use default
+ targetSdkVersion enable16kPageSizes() ? 35 : rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
signingConfig signingConfigs.debug
diff --git a/cgeDemo/src/main/AndroidManifest.xml b/cgeDemo/src/main/AndroidManifest.xml
index ec3256f7..36eb99b2 100644
--- a/cgeDemo/src/main/AndroidManifest.xml
+++ b/cgeDemo/src/main/AndroidManifest.xml
@@ -11,11 +11,11 @@
-
+
+
+ android:label="@string/app_name"
+ android:exported="true">
diff --git a/gradle.properties b/gradle.properties
index 87b57776..b23dde07 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -20,4 +20,4 @@ android.enableJetifier=true
android.injected.testOnly=false
#android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
-android.nonFinalResIds=false
\ No newline at end of file
+android.nonFinalResIds=false
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index b504428e..4d00ae61 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Thu Jan 05 14:44:46 CST 2023
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index c7e7078d..bb6ebfea 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -1,2 +1,3 @@
+
\ No newline at end of file
diff --git a/library/src/main/java/org/wysaid/view/CameraRecordGLSurfaceView.java b/library/src/main/java/org/wysaid/view/CameraRecordGLSurfaceView.java
index c5b9ea5a..6d895de5 100644
--- a/library/src/main/java/org/wysaid/view/CameraRecordGLSurfaceView.java
+++ b/library/src/main/java/org/wysaid/view/CameraRecordGLSurfaceView.java
@@ -5,6 +5,7 @@
*/
+import android.annotation.SuppressLint;
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioRecord;
@@ -162,6 +163,7 @@ class AudioRecordRunnable implements Runnable {
ShortBuffer audioBuffer;
StartRecordingCallback recordingCallback;
+ @SuppressLint("MissingPermission")
private AudioRecordRunnable(StartRecordingCallback callback) {
recordingCallback = callback;
try {
diff --git a/library/src/main/jni/CMakeLists.txt b/library/src/main/jni/CMakeLists.txt
index ac992e31..70262c2b 100644
--- a/library/src/main/jni/CMakeLists.txt
+++ b/library/src/main/jni/CMakeLists.txt
@@ -95,6 +95,7 @@ target_link_libraries(CGE PUBLIC
if(DEFINED ENABLE_16K_PAGE_SIZES AND ENABLE_16K_PAGE_SIZES)
# 16KB elf:
target_link_options(CGE PUBLIC -Wl,-z,max-page-size=16384,-z,common-page-size=16384)
+ target_compile_definitions(CGE PRIVATE ENABLE_16K_PAGE_SIZES=1)
message("ENABLE_16K_PAGE_SIZES=${ENABLE_16K_PAGE_SIZES}")
endif()
diff --git a/library/src/main/jni/interface/cgeNativeLibrary.cpp b/library/src/main/jni/interface/cgeNativeLibrary.cpp
index 4a6a6345..4dc4d2ff 100644
--- a/library/src/main/jni/interface/cgeNativeLibrary.cpp
+++ b/library/src/main/jni/interface/cgeNativeLibrary.cpp
@@ -17,9 +17,58 @@
#include
#include
#include
+#include
+#include
+#include
using namespace CGE;
+// Function to check 16KB page size status
+static void cgeCheck16kPageSize() {
+ const char* status = "Unknown";
+ const char* details = "";
+
+ // 1. Check compile-time support
+#ifdef ENABLE_16K_PAGE_SIZES
+ bool compileTimeSupport = true;
+#else
+ bool compileTimeSupport = false;
+#endif
+
+ // 2. Check runtime Android version (16KB pages are supported from Android 15, API 35)
+ int apiLevel = android_get_device_api_level();
+ bool systemSupport = (apiLevel >= 35);
+
+ // 3. Check actual page size being used
+ long pageSize = sysconf(_SC_PAGESIZE);
+ bool activelyUsing16k = (pageSize == 16384);
+
+ // Determine status and details
+ if (!compileTimeSupport) {
+ status = "DISABLED";
+ details = "16KB page size support not enabled at compile time";
+ } else if (!systemSupport) {
+ status = "COMPILE_READY";
+ details = "16KB support compiled in, but Android version < 35 (Android 15)";
+ } else if (activelyUsing16k) {
+ status = "ACTIVE";
+ details = "16KB page size is fully active and working";
+ } else {
+ status = "SUPPORTED_BUT_INACTIVE";
+ details = "16KB support available but current page size is not 16KB";
+ }
+
+ // Log comprehensive status - use CGE_LOG_KEEP for important status info
+ CGE_LOG_KEEP("=== CGE 16KB Page Size Status ===");
+ CGE_LOG_KEEP("Status: %s", status);
+ CGE_LOG_KEEP("Details: %s", details);
+ CGE_LOG_INFO("Compile-time support: %s", compileTimeSupport ? "YES" : "NO");
+ CGE_LOG_INFO("Android API Level: %d (16KB support needs API 35+)", apiLevel);
+ CGE_LOG_INFO("Current page size: %ld bytes", pageSize);
+ CGE_LOG_INFO("16KB pages active: %s", activelyUsing16k ? "YES" : "NO");
+ CGE_LOG_KEEP("================================");
+}
+
extern "C"
{
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
@@ -27,6 +76,10 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
cgeGl3StubInit();
cgeGl31StubInit();
CGE_LOG_INFO("JNI_OnLoad called. cgeGl3StubInit called.\n");
+
+ // Check and report 16KB page size status
+ cgeCheck16kPageSize();
+
return JNI_VERSION_1_6;
}