Category Archive: android
KSVG: A Modern SVG Renderer for Android
Rendering fidelity, GPU-accelerated filters, and SIMD-optimized CPU rendering.
Where It All Started
It all started with an icon that wouldn’t render correctly.
While working on NewsFeed Launcher, I came across an icon displayed inside the app that wasn’t rendering correctly. It turned out to be an SVG rendered by AndroidSVG, so I went straight to the library’s source code to find out what was going wrong.
Eventually I found it: the image used an SVG <mask>, and the original Java renderMask mishandled mask positioning and sizing: it ignored the x and y attributes, used incorrect default dimensions and offsets, and failed to constrain the mask to its declared region. It also used full-canvas intermediate layers for compositing.
From a Fix to a Full-Fledged Renderer
AndroidSVG had other shortcomings too. I initially set it aside, but returned a few weeks later with a plan to move it to Kotlin and address some of the missing features. Filters were the biggest gap, so that became the next major area of work. The project gradually evolved into a renderer I could rely on in production. The development took roughly two and a half to three months to reach its current state.
AI tools also played a useful role in the implementation, particularly in writing and refining the assembly kernels. I used them to explore implementation approaches, while parity tests and measurements on actual devices determined what made it into the final code.
The move to Kotlin was about more than translating the existing Java code. I wanted an implementation that was easier to reason about and a public API that felt natural to Android developers today — myself included. KSVG is Kotlin-first rather than “pure Kotlin”: the API and rendering core are Kotlin, while the filter engine uses native code where the pixel work needs it.
Inline higher-order functions were one practical reason for choosing Kotlin. They let me keep expressive abstractions in performance-sensitive code without adding function-object overhead in the hot paths where lambdas would otherwise be created repeatedly during drawing or animation updates.
What you get from KSVG
OkHttp with enabled R8 optimization | SIGSEV
If you enable the optimizations in R8 by using the proguard-android-optimize.txt, you might experience strange SIGSEV JIT crashes, caused by some large constants inlined into the -HostnamesCommonKt class.
To resolve the issue, use the following Proguard config snippet:
-keep,allowobfuscation class okhttp3.internal.idn.** {
<fields>;
<methods>;
}
New default icon pack change request in the NewsFeed Launcher
With the newest NewsFeed Launcher version 20.0.0, third party icon packs now can request to be the selected icon pack.
This can be possible via a similar method as in another launchers.
Example code:
class ExampleActivity extends Activity {
...
private void onApplyIconPackClick() {
String selfPackageName = getPackageName();
Intent request = Intent("hu.oandras.newsfeedlauncher.APPLY_ICON_PACK");
request.setPackage("hu.oandras.newsfeedlauncher");
ComponentName component = new ComponentName(
"hu.oandras.newsfeedlauncher",
"hu.oandras.newsfeedlauncher.customization.ApplyIconPackActivity"
);
request.setComponent(component);
request.putExtra("package", selfPackageName);
startActivityForResult(request, REQ_CODE);
}
...
}
ZTE/MTN MF831 – Unhide Port Forward and DMZ settings
1. Plug your stick to your Mac/PC and enter the following url in your browser:
192.168.0.1/goform/goform_set_cmd_process?goformId=USB_MODE_SWITCH&usb_mode=6
You will get: {"result":"success"}2. Open the Terminal/Cmd and test the connection with
adb shell. If you get the shell, type exit…
Samsung GT-S7562 – Cyanogenmod 4.4.4 RC3
I released the third version of my CyanogenMod KitKat for GT-S7562.
Changelog:
- Improved Bluetooth support
- Most kernel debug flags disabled
- Added some missing libraries
- Merged all CyanogenMod source changes
- Bugfixes
You can find the download links on the xda-developers.com
My sources available on my GitHub profile.
Samsung GT-S7562 – Cyanogenmod 4.4.4 RC2
I released the second version of my CyanogenMod KitKat for GT-S7562 with initial Bluetooth support.
Changelog:
- 1. Backported Bluetooth driver and Management Interface from Linux Kernel v.3.13
- 2. Newest Bluez 5.28 Bluetooth stack
- 3. Few bugfixes to wireless driver
- 4. All RC1 updates included
You can find the download links on xda-developers.com .
Samsung GT-S7562 – Cyanogenmod KitKat 4.4.4
I’m proudly present my first Android releated work. :)
In december 2014, I got a GT-S7562 and I was not satisfied with its original Samsung firmware, because it was slow and has a lot of bloatware.
So I decided to make a working release of Cyanogenmod 11.
The GT-S7560M has a similar hardware except the dual-SIM RIL, so the kylessopen firmware (thanks to jonypx09) was a good initial source.
I reverse engineered the stock Java Radio Interface Layer, and based on that informations, I restructured the kylessopen’s sources.
Finally with my custom telephony-common, telephony-msim java layer, and with the stock rild, and libril*.so binaries, the GSM connection works.

