Bopbi’s mind
I’m Bobby, an Android Dev and (still) an app hobbyist
Current Project
- QRGen : QR Code Generator for Android
Recent TIL
Date: 2025/06/26
Interesting tools (approach)
- Secrets Gradle Plugin for Android using the same approach as the Google Maps SDK
- gitleaks a Static analytics tools
git filter-branch
manually check git history
- git-filter-repo remove logged secret changes by rewrite git history (using python)
- BFG Repo-cleaner remove logged secret changes by rewrite git history (using scala)
- hidden-secrets-gradle-plugin uses ndk with XOR (may be not maintained last commit are 2 years ago)
- bytemask mask secrets that make it difficult to reverse engineering
- Sekret store secrets on NDK using KMM plugin, also provide secure logging by using for annotated compatible string/char property
- Own API proxy servers
Date: 2025/05/25
Three Phase in Compose
- Composition: What UI to show, building tree of composables
- Layout: Where to Place UI, layout take those composables and works out where on the screen they will be shown
- Drawing: How it renders, Draw everything to screen
Compose can skip a phase entirely if nothing has changed in it
Prefer lambda modifiers when using frequently changing state, the video show case is using the scroll provider lambda over y property when performing translation, and reading the state inside the graphicsLayer
Date: 2025/01/03
Since i often forget to about the name of the Version, the codename
and the site is include the play store requirement changes, and major library info
Date: 2024/12/15
Separate assert and code triggering into 2 different set of coroutine launch
- the first one is for assertion, the launch should use
UnconfinedTestDispatcher
- the other (last) one is for trigger the code / sequence / logic
Please note that when using flow the code triggering should still use a separate launch and not inside the test
block