fix: publish android debug symbols - #99

Merged
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols
Jun 9, 2026
Merged

fix: publish android debug symbols#99
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols

Conversation

@ovitrif

@ovitrifovitrif commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Refs synonymdev/bitkit-android#982

Unblocks synonymdev/bitkit-android#988.

Description

Android release symbol extraction failed because previously published bitkit-core AARs contained stripped libbitkitcore.so files without usable native debug metadata.

This bumps bitkit-core to 0.1.70 and changes the Android build/publish path so release artifacts keep native debug metadata and satisfy the Android 16 KB page-size alignment requirement:

  • Build Android native libraries with release debug metadata and cargo ndk --no-strip.
  • Use Android NDK r28c for package publication.
  • Export ANDROID_NDK_ROOT via $GITHUB_ENV after setup-ndk so script and Gradle build/publish steps can find NDK llvm-readelf.
  • Preserve the repo's existing Android target rustflags while adding 16 KB LOAD segment alignment linker flags.
  • Fail build_android.sh if any ABI lacks .symtab, .debug_*, or .gnu_debugdata metadata.
  • Validate 16 KB LOAD alignment with wide readelf/llvm-readelf program-header output.
  • Locate llvm-readelf from ANDROID_NDK_ROOT, ANDROID_NDK_HOME, or NDK_HOME when it is not already on PATH.
  • Preserve libbitkitcore.so symbols through Gradle release AAR packaging.
  • Add Gradle publish-time validation so bundleReleaseAar and direct Gradle publish tasks fail if checked-in jniLibs lacks native debug metadata or 16 KB LOAD alignment.
  • Update terminal Android publish docs to run ./build_android.sh before direct Gradle publish.
  • Regenerate Android bindings in the Gradle publish workflow before publishing the AAR.
  • Update the iOS xcframework and Package.swift checksum for the same release version.

Release

Preview

N/A

QA Notes

  • Passed: Android package publish workflow for com.synonym:bitkit-core-android:0.1.70.
  • Passed after final review fixes: bash -n build_android.sh.
  • Passed after final review fixes: git diff --check.
  • Passed: workflow YAML parses locally; publish-workflow behavior can be verified automatically after merge.
  • Passed after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck.
  • Passed after final review fixes: ./build_android.sh revalidated the terminal build/publish path and ran :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • Verified after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails stale checked-in jniLibs before regeneration, proving direct Gradle publish is guarded.
  • Passed after final review fixes: NDK llvm-readelf discovery through ANDROID_NDK_ROOT.
  • Passed: local llvm-readelf -W -l LOAD-alignment probe returned 0x4000 for arm64-v8a/libbitkitcore.so.
  • Passed before final script-only review fixes: ./build_android.sh.
  • Passed before final script-only review fixes: ./build_ios.sh.
  • Passed before final script-only review fixes: cargo fmt --check.
  • Passed before final script-only review fixes: cargo clippy (0 errors, existing warnings).
  • Passed before final script-only review fixes: cargo test --lib -- --skip modules::blocktank.
  • Verified Swift checksum: 3717f97d4c184509f8093a87f6d8a5c4085d771264d789d1102ab6321fbb3ed6.
  • cargo test reached 358 passed before 11 existing Blocktank staging/regtest network tests timed out against api.stag.blocktank.to.
  • Publish-workflow behavior from this PR can be verified automatically after merge.

@ovitrif
ovitrif marked this pull request as ready for review June 4, 2026 20:39
@ovitrif
ovitrif requested a review from ben-kaufmanJune 4, 2026 20:42
@ovitrifovitrif self-assigned this Jun 4, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reaudit note.

Comment thread.github/workflows/gradle-publish.yml
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif requested a review from ben-kaufmanJune 5, 2026 16:42
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufman

Copy link
Copy Markdown
Collaborator

Could we update this terminal publish path to run ./build_android.sh first, or remove it? The GitHub Actions path regenerates jniLibs before publishing, but this direct Gradle path still packages the checked-in native libs. I verified publishToMavenLocal from this checkout produces an AAR with no native debug metadata, and the 32-bit libs are still 0x1000 aligned.

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Could we update this terminal publish path to run ./build_android.sh first, or remove it?

Updated the terminal publish recipe to run ./build_android.sh before direct Gradle publishing, and added a Gradle validateReleaseNativeLibraries gate to bundleReleaseAar and publish tasks so direct Gradle publishing now fails if jniLibs lacks native debug metadata or 16 KB LOAD alignment.

Validation:

  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails on the stale checked-in libs before regeneration, matching the issue.
  • ./build_android.sh passes and executes :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck passes.
  • git diff --check passes.

Resolved in e373700

Comment thread.github/workflows/gradle-publish.yml

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good after reaudit.

@ovitrif
ovitrif merged commit ce0f468 into masterJun 9, 2026
@ovitrif
ovitrif deleted the ovi/fix-android-native-symbols branch June 9, 2026 21:49
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ovitrif@ben-kaufman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: publish android debug symbols - #99

Merged
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols
Jun 9, 2026
Merged

fix: publish android debug symbols#99
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols

Conversation

@ovitrif

@ovitrifovitrif commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Refs synonymdev/bitkit-android#982

Unblocks synonymdev/bitkit-android#988.

Description

Android release symbol extraction failed because previously published bitkit-core AARs contained stripped libbitkitcore.so files without usable native debug metadata.

This bumps bitkit-core to 0.1.70 and changes the Android build/publish path so release artifacts keep native debug metadata and satisfy the Android 16 KB page-size alignment requirement:

  • Build Android native libraries with release debug metadata and cargo ndk --no-strip.
  • Use Android NDK r28c for package publication.
  • Export ANDROID_NDK_ROOT via $GITHUB_ENV after setup-ndk so script and Gradle build/publish steps can find NDK llvm-readelf.
  • Preserve the repo's existing Android target rustflags while adding 16 KB LOAD segment alignment linker flags.
  • Fail build_android.sh if any ABI lacks .symtab, .debug_*, or .gnu_debugdata metadata.
  • Validate 16 KB LOAD alignment with wide readelf/llvm-readelf program-header output.
  • Locate llvm-readelf from ANDROID_NDK_ROOT, ANDROID_NDK_HOME, or NDK_HOME when it is not already on PATH.
  • Preserve libbitkitcore.so symbols through Gradle release AAR packaging.
  • Add Gradle publish-time validation so bundleReleaseAar and direct Gradle publish tasks fail if checked-in jniLibs lacks native debug metadata or 16 KB LOAD alignment.
  • Update terminal Android publish docs to run ./build_android.sh before direct Gradle publish.
  • Regenerate Android bindings in the Gradle publish workflow before publishing the AAR.
  • Update the iOS xcframework and Package.swift checksum for the same release version.

Release

Preview

N/A

QA Notes

  • Passed: Android package publish workflow for com.synonym:bitkit-core-android:0.1.70.
  • Passed after final review fixes: bash -n build_android.sh.
  • Passed after final review fixes: git diff --check.
  • Passed: workflow YAML parses locally; publish-workflow behavior can be verified automatically after merge.
  • Passed after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck.
  • Passed after final review fixes: ./build_android.sh revalidated the terminal build/publish path and ran :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • Verified after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails stale checked-in jniLibs before regeneration, proving direct Gradle publish is guarded.
  • Passed after final review fixes: NDK llvm-readelf discovery through ANDROID_NDK_ROOT.
  • Passed: local llvm-readelf -W -l LOAD-alignment probe returned 0x4000 for arm64-v8a/libbitkitcore.so.
  • Passed before final script-only review fixes: ./build_android.sh.
  • Passed before final script-only review fixes: ./build_ios.sh.
  • Passed before final script-only review fixes: cargo fmt --check.
  • Passed before final script-only review fixes: cargo clippy (0 errors, existing warnings).
  • Passed before final script-only review fixes: cargo test --lib -- --skip modules::blocktank.
  • Verified Swift checksum: 3717f97d4c184509f8093a87f6d8a5c4085d771264d789d1102ab6321fbb3ed6.
  • cargo test reached 358 passed before 11 existing Blocktank staging/regtest network tests timed out against api.stag.blocktank.to.
  • Publish-workflow behavior from this PR can be verified automatically after merge.

@ovitrif
ovitrif marked this pull request as ready for review June 4, 2026 20:39
@ovitrif
ovitrif requested a review from ben-kaufmanJune 4, 2026 20:42
@ovitrifovitrif self-assigned this Jun 4, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reaudit note.

Comment thread.github/workflows/gradle-publish.yml
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif requested a review from ben-kaufmanJune 5, 2026 16:42
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufman

Copy link
Copy Markdown
Collaborator

Could we update this terminal publish path to run ./build_android.sh first, or remove it? The GitHub Actions path regenerates jniLibs before publishing, but this direct Gradle path still packages the checked-in native libs. I verified publishToMavenLocal from this checkout produces an AAR with no native debug metadata, and the 32-bit libs are still 0x1000 aligned.

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Could we update this terminal publish path to run ./build_android.sh first, or remove it?

Updated the terminal publish recipe to run ./build_android.sh before direct Gradle publishing, and added a Gradle validateReleaseNativeLibraries gate to bundleReleaseAar and publish tasks so direct Gradle publishing now fails if jniLibs lacks native debug metadata or 16 KB LOAD alignment.

Validation:

  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails on the stale checked-in libs before regeneration, matching the issue.
  • ./build_android.sh passes and executes :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck passes.
  • git diff --check passes.

Resolved in e373700

Comment thread.github/workflows/gradle-publish.yml

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good after reaudit.

@ovitrif
ovitrif merged commit ce0f468 into masterJun 9, 2026
@ovitrif
ovitrif deleted the ovi/fix-android-native-symbols branch June 9, 2026 21:49
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ovitrif@ben-kaufman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: publish android debug symbols - #99

Merged
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols
Jun 9, 2026
Merged

fix: publish android debug symbols#99
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols

Conversation

@ovitrif

@ovitrifovitrif commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Refs synonymdev/bitkit-android#982

Unblocks synonymdev/bitkit-android#988.

Description

Android release symbol extraction failed because previously published bitkit-core AARs contained stripped libbitkitcore.so files without usable native debug metadata.

This bumps bitkit-core to 0.1.70 and changes the Android build/publish path so release artifacts keep native debug metadata and satisfy the Android 16 KB page-size alignment requirement:

  • Build Android native libraries with release debug metadata and cargo ndk --no-strip.
  • Use Android NDK r28c for package publication.
  • Export ANDROID_NDK_ROOT via $GITHUB_ENV after setup-ndk so script and Gradle build/publish steps can find NDK llvm-readelf.
  • Preserve the repo's existing Android target rustflags while adding 16 KB LOAD segment alignment linker flags.
  • Fail build_android.sh if any ABI lacks .symtab, .debug_*, or .gnu_debugdata metadata.
  • Validate 16 KB LOAD alignment with wide readelf/llvm-readelf program-header output.
  • Locate llvm-readelf from ANDROID_NDK_ROOT, ANDROID_NDK_HOME, or NDK_HOME when it is not already on PATH.
  • Preserve libbitkitcore.so symbols through Gradle release AAR packaging.
  • Add Gradle publish-time validation so bundleReleaseAar and direct Gradle publish tasks fail if checked-in jniLibs lacks native debug metadata or 16 KB LOAD alignment.
  • Update terminal Android publish docs to run ./build_android.sh before direct Gradle publish.
  • Regenerate Android bindings in the Gradle publish workflow before publishing the AAR.
  • Update the iOS xcframework and Package.swift checksum for the same release version.

Release

Preview

N/A

QA Notes

  • Passed: Android package publish workflow for com.synonym:bitkit-core-android:0.1.70.
  • Passed after final review fixes: bash -n build_android.sh.
  • Passed after final review fixes: git diff --check.
  • Passed: workflow YAML parses locally; publish-workflow behavior can be verified automatically after merge.
  • Passed after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck.
  • Passed after final review fixes: ./build_android.sh revalidated the terminal build/publish path and ran :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • Verified after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails stale checked-in jniLibs before regeneration, proving direct Gradle publish is guarded.
  • Passed after final review fixes: NDK llvm-readelf discovery through ANDROID_NDK_ROOT.
  • Passed: local llvm-readelf -W -l LOAD-alignment probe returned 0x4000 for arm64-v8a/libbitkitcore.so.
  • Passed before final script-only review fixes: ./build_android.sh.
  • Passed before final script-only review fixes: ./build_ios.sh.
  • Passed before final script-only review fixes: cargo fmt --check.
  • Passed before final script-only review fixes: cargo clippy (0 errors, existing warnings).
  • Passed before final script-only review fixes: cargo test --lib -- --skip modules::blocktank.
  • Verified Swift checksum: 3717f97d4c184509f8093a87f6d8a5c4085d771264d789d1102ab6321fbb3ed6.
  • cargo test reached 358 passed before 11 existing Blocktank staging/regtest network tests timed out against api.stag.blocktank.to.
  • Publish-workflow behavior from this PR can be verified automatically after merge.

@ovitrif
ovitrif marked this pull request as ready for review June 4, 2026 20:39
@ovitrif
ovitrif requested a review from ben-kaufmanJune 4, 2026 20:42
@ovitrifovitrif self-assigned this Jun 4, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reaudit note.

Comment thread.github/workflows/gradle-publish.yml
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif requested a review from ben-kaufmanJune 5, 2026 16:42
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufman

Copy link
Copy Markdown
Collaborator

Could we update this terminal publish path to run ./build_android.sh first, or remove it? The GitHub Actions path regenerates jniLibs before publishing, but this direct Gradle path still packages the checked-in native libs. I verified publishToMavenLocal from this checkout produces an AAR with no native debug metadata, and the 32-bit libs are still 0x1000 aligned.

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Could we update this terminal publish path to run ./build_android.sh first, or remove it?

Updated the terminal publish recipe to run ./build_android.sh before direct Gradle publishing, and added a Gradle validateReleaseNativeLibraries gate to bundleReleaseAar and publish tasks so direct Gradle publishing now fails if jniLibs lacks native debug metadata or 16 KB LOAD alignment.

Validation:

  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails on the stale checked-in libs before regeneration, matching the issue.
  • ./build_android.sh passes and executes :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck passes.
  • git diff --check passes.

Resolved in e373700

Comment thread.github/workflows/gradle-publish.yml

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good after reaudit.

@ovitrif
ovitrif merged commit ce0f468 into masterJun 9, 2026
@ovitrif
ovitrif deleted the ovi/fix-android-native-symbols branch June 9, 2026 21:49
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ovitrif@ben-kaufman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: publish android debug symbols - #99

Merged
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols
Jun 9, 2026
Merged

fix: publish android debug symbols#99
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols

Conversation

@ovitrif

@ovitrifovitrif commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Refs synonymdev/bitkit-android#982

Unblocks synonymdev/bitkit-android#988.

Description

Android release symbol extraction failed because previously published bitkit-core AARs contained stripped libbitkitcore.so files without usable native debug metadata.

This bumps bitkit-core to 0.1.70 and changes the Android build/publish path so release artifacts keep native debug metadata and satisfy the Android 16 KB page-size alignment requirement:

  • Build Android native libraries with release debug metadata and cargo ndk --no-strip.
  • Use Android NDK r28c for package publication.
  • Export ANDROID_NDK_ROOT via $GITHUB_ENV after setup-ndk so script and Gradle build/publish steps can find NDK llvm-readelf.
  • Preserve the repo's existing Android target rustflags while adding 16 KB LOAD segment alignment linker flags.
  • Fail build_android.sh if any ABI lacks .symtab, .debug_*, or .gnu_debugdata metadata.
  • Validate 16 KB LOAD alignment with wide readelf/llvm-readelf program-header output.
  • Locate llvm-readelf from ANDROID_NDK_ROOT, ANDROID_NDK_HOME, or NDK_HOME when it is not already on PATH.
  • Preserve libbitkitcore.so symbols through Gradle release AAR packaging.
  • Add Gradle publish-time validation so bundleReleaseAar and direct Gradle publish tasks fail if checked-in jniLibs lacks native debug metadata or 16 KB LOAD alignment.
  • Update terminal Android publish docs to run ./build_android.sh before direct Gradle publish.
  • Regenerate Android bindings in the Gradle publish workflow before publishing the AAR.
  • Update the iOS xcframework and Package.swift checksum for the same release version.

Release

Preview

N/A

QA Notes

  • Passed: Android package publish workflow for com.synonym:bitkit-core-android:0.1.70.
  • Passed after final review fixes: bash -n build_android.sh.
  • Passed after final review fixes: git diff --check.
  • Passed: workflow YAML parses locally; publish-workflow behavior can be verified automatically after merge.
  • Passed after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck.
  • Passed after final review fixes: ./build_android.sh revalidated the terminal build/publish path and ran :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • Verified after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails stale checked-in jniLibs before regeneration, proving direct Gradle publish is guarded.
  • Passed after final review fixes: NDK llvm-readelf discovery through ANDROID_NDK_ROOT.
  • Passed: local llvm-readelf -W -l LOAD-alignment probe returned 0x4000 for arm64-v8a/libbitkitcore.so.
  • Passed before final script-only review fixes: ./build_android.sh.
  • Passed before final script-only review fixes: ./build_ios.sh.
  • Passed before final script-only review fixes: cargo fmt --check.
  • Passed before final script-only review fixes: cargo clippy (0 errors, existing warnings).
  • Passed before final script-only review fixes: cargo test --lib -- --skip modules::blocktank.
  • Verified Swift checksum: 3717f97d4c184509f8093a87f6d8a5c4085d771264d789d1102ab6321fbb3ed6.
  • cargo test reached 358 passed before 11 existing Blocktank staging/regtest network tests timed out against api.stag.blocktank.to.
  • Publish-workflow behavior from this PR can be verified automatically after merge.

@ovitrif
ovitrif marked this pull request as ready for review June 4, 2026 20:39
@ovitrif
ovitrif requested a review from ben-kaufmanJune 4, 2026 20:42
@ovitrifovitrif self-assigned this Jun 4, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reaudit note.

Comment thread.github/workflows/gradle-publish.yml
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif requested a review from ben-kaufmanJune 5, 2026 16:42
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufman

Copy link
Copy Markdown
Collaborator

Could we update this terminal publish path to run ./build_android.sh first, or remove it? The GitHub Actions path regenerates jniLibs before publishing, but this direct Gradle path still packages the checked-in native libs. I verified publishToMavenLocal from this checkout produces an AAR with no native debug metadata, and the 32-bit libs are still 0x1000 aligned.

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Could we update this terminal publish path to run ./build_android.sh first, or remove it?

Updated the terminal publish recipe to run ./build_android.sh before direct Gradle publishing, and added a Gradle validateReleaseNativeLibraries gate to bundleReleaseAar and publish tasks so direct Gradle publishing now fails if jniLibs lacks native debug metadata or 16 KB LOAD alignment.

Validation:

  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails on the stale checked-in libs before regeneration, matching the issue.
  • ./build_android.sh passes and executes :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck passes.
  • git diff --check passes.

Resolved in e373700

Comment thread.github/workflows/gradle-publish.yml

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good after reaudit.

@ovitrif
ovitrif merged commit ce0f468 into masterJun 9, 2026
@ovitrif
ovitrif deleted the ovi/fix-android-native-symbols branch June 9, 2026 21:49
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ovitrif@ben-kaufman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: publish android debug symbols - #99

Merged
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols
Jun 9, 2026
Merged

fix: publish android debug symbols#99
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols

Conversation

@ovitrif

@ovitrifovitrif commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Refs synonymdev/bitkit-android#982

Unblocks synonymdev/bitkit-android#988.

Description

Android release symbol extraction failed because previously published bitkit-core AARs contained stripped libbitkitcore.so files without usable native debug metadata.

This bumps bitkit-core to 0.1.70 and changes the Android build/publish path so release artifacts keep native debug metadata and satisfy the Android 16 KB page-size alignment requirement:

  • Build Android native libraries with release debug metadata and cargo ndk --no-strip.
  • Use Android NDK r28c for package publication.
  • Export ANDROID_NDK_ROOT via $GITHUB_ENV after setup-ndk so script and Gradle build/publish steps can find NDK llvm-readelf.
  • Preserve the repo's existing Android target rustflags while adding 16 KB LOAD segment alignment linker flags.
  • Fail build_android.sh if any ABI lacks .symtab, .debug_*, or .gnu_debugdata metadata.
  • Validate 16 KB LOAD alignment with wide readelf/llvm-readelf program-header output.
  • Locate llvm-readelf from ANDROID_NDK_ROOT, ANDROID_NDK_HOME, or NDK_HOME when it is not already on PATH.
  • Preserve libbitkitcore.so symbols through Gradle release AAR packaging.
  • Add Gradle publish-time validation so bundleReleaseAar and direct Gradle publish tasks fail if checked-in jniLibs lacks native debug metadata or 16 KB LOAD alignment.
  • Update terminal Android publish docs to run ./build_android.sh before direct Gradle publish.
  • Regenerate Android bindings in the Gradle publish workflow before publishing the AAR.
  • Update the iOS xcframework and Package.swift checksum for the same release version.

Release

Preview

N/A

QA Notes

  • Passed: Android package publish workflow for com.synonym:bitkit-core-android:0.1.70.
  • Passed after final review fixes: bash -n build_android.sh.
  • Passed after final review fixes: git diff --check.
  • Passed: workflow YAML parses locally; publish-workflow behavior can be verified automatically after merge.
  • Passed after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck.
  • Passed after final review fixes: ./build_android.sh revalidated the terminal build/publish path and ran :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • Verified after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails stale checked-in jniLibs before regeneration, proving direct Gradle publish is guarded.
  • Passed after final review fixes: NDK llvm-readelf discovery through ANDROID_NDK_ROOT.
  • Passed: local llvm-readelf -W -l LOAD-alignment probe returned 0x4000 for arm64-v8a/libbitkitcore.so.
  • Passed before final script-only review fixes: ./build_android.sh.
  • Passed before final script-only review fixes: ./build_ios.sh.
  • Passed before final script-only review fixes: cargo fmt --check.
  • Passed before final script-only review fixes: cargo clippy (0 errors, existing warnings).
  • Passed before final script-only review fixes: cargo test --lib -- --skip modules::blocktank.
  • Verified Swift checksum: 3717f97d4c184509f8093a87f6d8a5c4085d771264d789d1102ab6321fbb3ed6.
  • cargo test reached 358 passed before 11 existing Blocktank staging/regtest network tests timed out against api.stag.blocktank.to.
  • Publish-workflow behavior from this PR can be verified automatically after merge.

@ovitrif
ovitrif marked this pull request as ready for review June 4, 2026 20:39
@ovitrif
ovitrif requested a review from ben-kaufmanJune 4, 2026 20:42
@ovitrifovitrif self-assigned this Jun 4, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reaudit note.

Comment thread.github/workflows/gradle-publish.yml
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif requested a review from ben-kaufmanJune 5, 2026 16:42
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufman

Copy link
Copy Markdown
Collaborator

Could we update this terminal publish path to run ./build_android.sh first, or remove it? The GitHub Actions path regenerates jniLibs before publishing, but this direct Gradle path still packages the checked-in native libs. I verified publishToMavenLocal from this checkout produces an AAR with no native debug metadata, and the 32-bit libs are still 0x1000 aligned.

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Could we update this terminal publish path to run ./build_android.sh first, or remove it?

Updated the terminal publish recipe to run ./build_android.sh before direct Gradle publishing, and added a Gradle validateReleaseNativeLibraries gate to bundleReleaseAar and publish tasks so direct Gradle publishing now fails if jniLibs lacks native debug metadata or 16 KB LOAD alignment.

Validation:

  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails on the stale checked-in libs before regeneration, matching the issue.
  • ./build_android.sh passes and executes :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck passes.
  • git diff --check passes.

Resolved in e373700

Comment thread.github/workflows/gradle-publish.yml

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good after reaudit.

@ovitrif
ovitrif merged commit ce0f468 into masterJun 9, 2026
@ovitrif
ovitrif deleted the ovi/fix-android-native-symbols branch June 9, 2026 21:49
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ovitrif@ben-kaufman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: publish android debug symbols - #99

Merged
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols
Jun 9, 2026
Merged

fix: publish android debug symbols#99
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols

Conversation

@ovitrif

@ovitrifovitrif commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Refs synonymdev/bitkit-android#982

Unblocks synonymdev/bitkit-android#988.

Description

Android release symbol extraction failed because previously published bitkit-core AARs contained stripped libbitkitcore.so files without usable native debug metadata.

This bumps bitkit-core to 0.1.70 and changes the Android build/publish path so release artifacts keep native debug metadata and satisfy the Android 16 KB page-size alignment requirement:

  • Build Android native libraries with release debug metadata and cargo ndk --no-strip.
  • Use Android NDK r28c for package publication.
  • Export ANDROID_NDK_ROOT via $GITHUB_ENV after setup-ndk so script and Gradle build/publish steps can find NDK llvm-readelf.
  • Preserve the repo's existing Android target rustflags while adding 16 KB LOAD segment alignment linker flags.
  • Fail build_android.sh if any ABI lacks .symtab, .debug_*, or .gnu_debugdata metadata.
  • Validate 16 KB LOAD alignment with wide readelf/llvm-readelf program-header output.
  • Locate llvm-readelf from ANDROID_NDK_ROOT, ANDROID_NDK_HOME, or NDK_HOME when it is not already on PATH.
  • Preserve libbitkitcore.so symbols through Gradle release AAR packaging.
  • Add Gradle publish-time validation so bundleReleaseAar and direct Gradle publish tasks fail if checked-in jniLibs lacks native debug metadata or 16 KB LOAD alignment.
  • Update terminal Android publish docs to run ./build_android.sh before direct Gradle publish.
  • Regenerate Android bindings in the Gradle publish workflow before publishing the AAR.
  • Update the iOS xcframework and Package.swift checksum for the same release version.

Release

Preview

N/A

QA Notes

  • Passed: Android package publish workflow for com.synonym:bitkit-core-android:0.1.70.
  • Passed after final review fixes: bash -n build_android.sh.
  • Passed after final review fixes: git diff --check.
  • Passed: workflow YAML parses locally; publish-workflow behavior can be verified automatically after merge.
  • Passed after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck.
  • Passed after final review fixes: ./build_android.sh revalidated the terminal build/publish path and ran :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • Verified after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails stale checked-in jniLibs before regeneration, proving direct Gradle publish is guarded.
  • Passed after final review fixes: NDK llvm-readelf discovery through ANDROID_NDK_ROOT.
  • Passed: local llvm-readelf -W -l LOAD-alignment probe returned 0x4000 for arm64-v8a/libbitkitcore.so.
  • Passed before final script-only review fixes: ./build_android.sh.
  • Passed before final script-only review fixes: ./build_ios.sh.
  • Passed before final script-only review fixes: cargo fmt --check.
  • Passed before final script-only review fixes: cargo clippy (0 errors, existing warnings).
  • Passed before final script-only review fixes: cargo test --lib -- --skip modules::blocktank.
  • Verified Swift checksum: 3717f97d4c184509f8093a87f6d8a5c4085d771264d789d1102ab6321fbb3ed6.
  • cargo test reached 358 passed before 11 existing Blocktank staging/regtest network tests timed out against api.stag.blocktank.to.
  • Publish-workflow behavior from this PR can be verified automatically after merge.

@ovitrif
ovitrif marked this pull request as ready for review June 4, 2026 20:39
@ovitrif
ovitrif requested a review from ben-kaufmanJune 4, 2026 20:42
@ovitrifovitrif self-assigned this Jun 4, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reaudit note.

Comment thread.github/workflows/gradle-publish.yml
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif requested a review from ben-kaufmanJune 5, 2026 16:42
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufman

Copy link
Copy Markdown
Collaborator

Could we update this terminal publish path to run ./build_android.sh first, or remove it? The GitHub Actions path regenerates jniLibs before publishing, but this direct Gradle path still packages the checked-in native libs. I verified publishToMavenLocal from this checkout produces an AAR with no native debug metadata, and the 32-bit libs are still 0x1000 aligned.

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Could we update this terminal publish path to run ./build_android.sh first, or remove it?

Updated the terminal publish recipe to run ./build_android.sh before direct Gradle publishing, and added a Gradle validateReleaseNativeLibraries gate to bundleReleaseAar and publish tasks so direct Gradle publishing now fails if jniLibs lacks native debug metadata or 16 KB LOAD alignment.

Validation:

  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails on the stale checked-in libs before regeneration, matching the issue.
  • ./build_android.sh passes and executes :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck passes.
  • git diff --check passes.

Resolved in e373700

Comment thread.github/workflows/gradle-publish.yml

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good after reaudit.

@ovitrif
ovitrif merged commit ce0f468 into masterJun 9, 2026
@ovitrif
ovitrif deleted the ovi/fix-android-native-symbols branch June 9, 2026 21:49
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ovitrif@ben-kaufman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: publish android debug symbols - #99

Merged
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols
Jun 9, 2026
Merged

fix: publish android debug symbols#99
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols

Conversation

@ovitrif

@ovitrifovitrif commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Refs synonymdev/bitkit-android#982

Unblocks synonymdev/bitkit-android#988.

Description

Android release symbol extraction failed because previously published bitkit-core AARs contained stripped libbitkitcore.so files without usable native debug metadata.

This bumps bitkit-core to 0.1.70 and changes the Android build/publish path so release artifacts keep native debug metadata and satisfy the Android 16 KB page-size alignment requirement:

  • Build Android native libraries with release debug metadata and cargo ndk --no-strip.
  • Use Android NDK r28c for package publication.
  • Export ANDROID_NDK_ROOT via $GITHUB_ENV after setup-ndk so script and Gradle build/publish steps can find NDK llvm-readelf.
  • Preserve the repo's existing Android target rustflags while adding 16 KB LOAD segment alignment linker flags.
  • Fail build_android.sh if any ABI lacks .symtab, .debug_*, or .gnu_debugdata metadata.
  • Validate 16 KB LOAD alignment with wide readelf/llvm-readelf program-header output.
  • Locate llvm-readelf from ANDROID_NDK_ROOT, ANDROID_NDK_HOME, or NDK_HOME when it is not already on PATH.
  • Preserve libbitkitcore.so symbols through Gradle release AAR packaging.
  • Add Gradle publish-time validation so bundleReleaseAar and direct Gradle publish tasks fail if checked-in jniLibs lacks native debug metadata or 16 KB LOAD alignment.
  • Update terminal Android publish docs to run ./build_android.sh before direct Gradle publish.
  • Regenerate Android bindings in the Gradle publish workflow before publishing the AAR.
  • Update the iOS xcframework and Package.swift checksum for the same release version.

Release

Preview

N/A

QA Notes

  • Passed: Android package publish workflow for com.synonym:bitkit-core-android:0.1.70.
  • Passed after final review fixes: bash -n build_android.sh.
  • Passed after final review fixes: git diff --check.
  • Passed: workflow YAML parses locally; publish-workflow behavior can be verified automatically after merge.
  • Passed after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck.
  • Passed after final review fixes: ./build_android.sh revalidated the terminal build/publish path and ran :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • Verified after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails stale checked-in jniLibs before regeneration, proving direct Gradle publish is guarded.
  • Passed after final review fixes: NDK llvm-readelf discovery through ANDROID_NDK_ROOT.
  • Passed: local llvm-readelf -W -l LOAD-alignment probe returned 0x4000 for arm64-v8a/libbitkitcore.so.
  • Passed before final script-only review fixes: ./build_android.sh.
  • Passed before final script-only review fixes: ./build_ios.sh.
  • Passed before final script-only review fixes: cargo fmt --check.
  • Passed before final script-only review fixes: cargo clippy (0 errors, existing warnings).
  • Passed before final script-only review fixes: cargo test --lib -- --skip modules::blocktank.
  • Verified Swift checksum: 3717f97d4c184509f8093a87f6d8a5c4085d771264d789d1102ab6321fbb3ed6.
  • cargo test reached 358 passed before 11 existing Blocktank staging/regtest network tests timed out against api.stag.blocktank.to.
  • Publish-workflow behavior from this PR can be verified automatically after merge.

@ovitrif
ovitrif marked this pull request as ready for review June 4, 2026 20:39
@ovitrif
ovitrif requested a review from ben-kaufmanJune 4, 2026 20:42
@ovitrifovitrif self-assigned this Jun 4, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reaudit note.

Comment thread.github/workflows/gradle-publish.yml
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif requested a review from ben-kaufmanJune 5, 2026 16:42
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufman

Copy link
Copy Markdown
Collaborator

Could we update this terminal publish path to run ./build_android.sh first, or remove it? The GitHub Actions path regenerates jniLibs before publishing, but this direct Gradle path still packages the checked-in native libs. I verified publishToMavenLocal from this checkout produces an AAR with no native debug metadata, and the 32-bit libs are still 0x1000 aligned.

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Could we update this terminal publish path to run ./build_android.sh first, or remove it?

Updated the terminal publish recipe to run ./build_android.sh before direct Gradle publishing, and added a Gradle validateReleaseNativeLibraries gate to bundleReleaseAar and publish tasks so direct Gradle publishing now fails if jniLibs lacks native debug metadata or 16 KB LOAD alignment.

Validation:

  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails on the stale checked-in libs before regeneration, matching the issue.
  • ./build_android.sh passes and executes :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck passes.
  • git diff --check passes.

Resolved in e373700

Comment thread.github/workflows/gradle-publish.yml

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good after reaudit.

@ovitrif
ovitrif merged commit ce0f468 into masterJun 9, 2026
@ovitrif
ovitrif deleted the ovi/fix-android-native-symbols branch June 9, 2026 21:49
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ovitrif@ben-kaufman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix: publish android debug symbols - #99

Merged
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols
Jun 9, 2026
Merged

fix: publish android debug symbols#99
ovitrif merged 14 commits into
masterfrom
ovi/fix-android-native-symbols

Conversation

@ovitrif

@ovitrifovitrif commented Jun 4, 2026

Copy link
Copy Markdown
Collaborator

Refs synonymdev/bitkit-android#982

Unblocks synonymdev/bitkit-android#988.

Description

Android release symbol extraction failed because previously published bitkit-core AARs contained stripped libbitkitcore.so files without usable native debug metadata.

This bumps bitkit-core to 0.1.70 and changes the Android build/publish path so release artifacts keep native debug metadata and satisfy the Android 16 KB page-size alignment requirement:

  • Build Android native libraries with release debug metadata and cargo ndk --no-strip.
  • Use Android NDK r28c for package publication.
  • Export ANDROID_NDK_ROOT via $GITHUB_ENV after setup-ndk so script and Gradle build/publish steps can find NDK llvm-readelf.
  • Preserve the repo's existing Android target rustflags while adding 16 KB LOAD segment alignment linker flags.
  • Fail build_android.sh if any ABI lacks .symtab, .debug_*, or .gnu_debugdata metadata.
  • Validate 16 KB LOAD alignment with wide readelf/llvm-readelf program-header output.
  • Locate llvm-readelf from ANDROID_NDK_ROOT, ANDROID_NDK_HOME, or NDK_HOME when it is not already on PATH.
  • Preserve libbitkitcore.so symbols through Gradle release AAR packaging.
  • Add Gradle publish-time validation so bundleReleaseAar and direct Gradle publish tasks fail if checked-in jniLibs lacks native debug metadata or 16 KB LOAD alignment.
  • Update terminal Android publish docs to run ./build_android.sh before direct Gradle publish.
  • Regenerate Android bindings in the Gradle publish workflow before publishing the AAR.
  • Update the iOS xcframework and Package.swift checksum for the same release version.

Release

Preview

N/A

QA Notes

  • Passed: Android package publish workflow for com.synonym:bitkit-core-android:0.1.70.
  • Passed after final review fixes: bash -n build_android.sh.
  • Passed after final review fixes: git diff --check.
  • Passed: workflow YAML parses locally; publish-workflow behavior can be verified automatically after merge.
  • Passed after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck.
  • Passed after final review fixes: ./build_android.sh revalidated the terminal build/publish path and ran :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • Verified after final review fixes: ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails stale checked-in jniLibs before regeneration, proving direct Gradle publish is guarded.
  • Passed after final review fixes: NDK llvm-readelf discovery through ANDROID_NDK_ROOT.
  • Passed: local llvm-readelf -W -l LOAD-alignment probe returned 0x4000 for arm64-v8a/libbitkitcore.so.
  • Passed before final script-only review fixes: ./build_android.sh.
  • Passed before final script-only review fixes: ./build_ios.sh.
  • Passed before final script-only review fixes: cargo fmt --check.
  • Passed before final script-only review fixes: cargo clippy (0 errors, existing warnings).
  • Passed before final script-only review fixes: cargo test --lib -- --skip modules::blocktank.
  • Verified Swift checksum: 3717f97d4c184509f8093a87f6d8a5c4085d771264d789d1102ab6321fbb3ed6.
  • cargo test reached 358 passed before 11 existing Blocktank staging/regtest network tests timed out against api.stag.blocktank.to.
  • Publish-workflow behavior from this PR can be verified automatically after merge.

@ovitrif
ovitrif marked this pull request as ready for review June 4, 2026 20:39
@ovitrif
ovitrif requested a review from ben-kaufmanJune 4, 2026 20:42
@ovitrifovitrif self-assigned this Jun 4, 2026
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reaudit note.

Comment thread.github/workflows/gradle-publish.yml
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif requested a review from ben-kaufmanJune 5, 2026 16:42
chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ben-kaufman

Copy link
Copy Markdown
Collaborator

Could we update this terminal publish path to run ./build_android.sh first, or remove it? The GitHub Actions path regenerates jniLibs before publishing, but this direct Gradle path still packages the checked-in native libs. I verified publishToMavenLocal from this checkout produces an AAR with no native debug metadata, and the 32-bit libs are still 0x1000 aligned.

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Could we update this terminal publish path to run ./build_android.sh first, or remove it?

Updated the terminal publish recipe to run ./build_android.sh before direct Gradle publishing, and added a Gradle validateReleaseNativeLibraries gate to bundleReleaseAar and publish tasks so direct Gradle publishing now fails if jniLibs lacks native debug metadata or 16 KB LOAD alignment.

Validation:

  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:validateReleaseNativeLibraries fails on the stale checked-in libs before regeneration, matching the issue.
  • ./build_android.sh passes and executes :lib:validateReleaseNativeLibraries before publishToMavenLocal.
  • ./bindings/android/gradlew --project-dir ./bindings/android :lib:ktlintCheck passes.
  • git diff --check passes.

Resolved in e373700

Comment thread.github/workflows/gradle-publish.yml

@ben-kaufmanben-kaufman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good after reaudit.

@ovitrif
ovitrif merged commit ce0f468 into masterJun 9, 2026
@ovitrif
ovitrif deleted the ovi/fix-android-native-symbols branch June 9, 2026 21:49
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ovitrif@ben-kaufman