Skip to content

Instantly share code, notes, and snippets.

View k-konovalov's full-sized avatar

Kirill Konovalov k-konovalov

  • inDrive
  • CY, Paphos
View GitHub Profile
@k-konovalov
k-konovalov / CanvasHintEditText.kt
Last active July 13, 2022 13:33
Android EditText with canvas hint (simplifield HintEditText from Telegram) for telephone masks
package sinet.startup.inDriver.feature.country.ui
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.text.TextPaint
import android.util.AttributeSet
import android.util.TypedValue
@k-konovalov
k-konovalov / build.gradle
Created May 12, 2022 14:44
Android debug / release code splitting (build config, code, deps)
/* Codebase placed in
debug: module/src/debug
release: module/src/release
and base manifest pwd module/src/main/AndroidManifest
!!! No code in src/main or it will provide DuplicateError
*/
android{
// Different buildConfig
defaultConfig {
@k-konovalov
k-konovalov / build.gradle
Created March 11, 2022 07:05
Crashlytics NDK: setup project
android {
firebaseCrashlytics {
nativeSymbolUploadEnabled true
// Зададаются пути т.к. мы используем сторонние NDK зависимости, которые лежат в других модулях
// https://firebase.google.com/docs/crashlytics/ndk-reports#upload-symbols-external-dependencies
unstrippedNativeLibsDir 'build/intermediates/merged_native_libs/release/out/lib'
}
}
depenencies {
implementation "com.google.firebase:firebase-crashlytics-ndk:18.2.8"
@k-konovalov
k-konovalov / constructorValueParser.kt
Created January 25, 2022 09:50
Kotlin: get constructor argument value via reflection
fun toArrayOfByteArrays(): Array<ByteArray> {
val bytesArr = mutableListOf<ByteArray>()
javaClass.declaredFields.forEach { field ->
val constructorValueAsStr = (field.get(this) as? String)
constructorValueAsStr?.let {
val bytes = fillBytes(it)
bytesArr.add(bytes)
}
}
@k-konovalov
k-konovalov / AssetExtensions.kt
Created January 19, 2022 10:45
Android: Kotlin useful extensions
import android.content.res.AssetManager
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
// Fun to get bitmap, text from assets
fun AssetManager.assetsToBitmap(fileName: String): Drawable? {
return try {
open(fileName).use {
BitmapDrawable.createFromStream(it, null)
}
@k-konovalov
k-konovalov / CMake.gradle
Created January 19, 2022 08:41
Android: Gradle examples and cheatsheets
# We can provide flags and paths to CMake (ex. OpenCV)
android {
defaultConfig {
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt') // path to CMake file
cppFlags "-frtti -fexceptions" //Turn on ability to stacktrace C++ exceptions
cppFlags "-std=c++17" //Specify c++ version
cppFlags "-DCMAKE_BUILD_TYPE=Debug"
cppFlags "-DENABLE_NEON=ON -DENABLE_VFPV3=ON"
@k-konovalov
k-konovalov / dump_process.sh
Last active January 24, 2022 15:36
Usefull Android bash scripts (PKG size, CPU Dumper)
#!/bin/bash
#Log to file avg / min / max process cpu % for selected number
#using: sh {selected_thread_name} {launch_times}
echo "--- CPU dumper <top>"
#Setup vars
selected_thread_name=$1
launch_times=$2
top_line_str=""
@k-konovalov
k-konovalov / jni_cheatsheet.cpp
Created August 12, 2021 14:09
JNI: get Java class field
/* For accessing primitive types from class use
following field descriptors
+---+---------+
| Z | boolean |
| B | byte |
| C | char |
| S | short |
| I | int |
| J | long |
@k-konovalov
k-konovalov / custom_class.kt
Created July 2, 2021 12:02
JNI Kotlin / Java struct with ByteArray to C++
data class Test(
val testField: ByteArray
)
private external fun extractByteArray(test: Test)
@k-konovalov
k-konovalov / ScrollingGradient.kt
Created June 17, 2021 11:45
Movable dynamic gradient as progressDrawable in ProgressBar
import android.content.Context
import android.util.AttributeSet
import android.widget.ProgressBar
import android.animation.TimeAnimator
import android.graphics.*
import android.graphics.drawable.Animatable
import android.graphics.drawable.Drawable
class ScrollingGradient : Drawable(), Animatable, TimeAnimator.TimeListener {