일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- MYSQL
- 2FA
- appres
- Android
- 인증
- SWIFT
- 앨범북
- Xcode
- git
- fido
- 안드로이드
- OTP
- 애플
- SwiftUI
- MSYS2
- WebAuthn
- SSH
- OSX
- openssl
- MFA
- SSL
- 앱스토어
- FIDO2
- kmip
- Nodejs
- css
- otpkey
- albumbook
- apple
- 앱리소스
- Today
- Total
목록소스 팁/Java, Android, Kotlin (59)
인디노트
우선 같은 WiFi 네트워크에 둬야 한다. 우선 장치를 USB 로 연결한다. 터미널에서 adb tcpip 5555 를 실행하여 restarting in TCP mode port: 5555 출력을 확인한다. 만약 error: more than one device/emulator 같은 에러가 나오면 그냥 안드로이드 스튜디오를 재실행 한 후 시도하면 된다. 장치를 USB 에서 연결 해제 한다. adb connect 172.30.1.58:5555 를 실행하여 connected to 172.30.1.58:5555 가 표시되는지 확인한다. 안드로이드 스튜디오에 다음과 같이 표시되면 연결된 것이다. USB 마크로 표시되지만 네트워크로 연결 되어 있는 것이다. 앱을 실행해 보면 네트워크로 연결되어 실행된다.
안드로이드 개발에서 문자를 버튼 중앙에 표시하기 위해서 다음 코드에서 처럼 includeFontPadding 를 false 로 하면 된다. android:includeFontPadding="false" 예를 들어보면 다음과 같다.
이 출시 버전에 com.google.android.gms.permission.AD_ID 권한이 포함되어 있지만, Play Console의 선언에는 앱에서 광고 ID를 사용하지 않는다고 명시되어 있습니다. 안드로이드 앱을 출시하려고 할 때 이러한 내용이 표시되면서 배포가 안된다. 분명히 앱은 광고 ID 권한을 명시 하지 않았는데 말이다. 구글의 Firebase 라이브러리를 사용하는 경우가 있다. 아마도 여기서 들어간듯 싶다. Analytics 에서 기본으로 들어가 있는듯 하다. 구글 SDK 의 데이터 수집에 대한 정보 중에서 다음과 같은 내용이 있다. Google 애널리틱스는 기본 구현을 통해 다음 정보를 수집합니다. 사용자 수 세션 통계 대략적인 위치정보 브라우저 및 기기 정보 이를 위해서 기본적으로 S..
안드로이드 스튜디어에서 컴파일시 다음과 같은 형식의 에러가 발생하면... Duplicate class org.hamcrest.BaseDescription found in modules hamcrest-core-1.1 (org.hamcrest:hamcrest-core:1.1) and junit-4.10 (junit:junit:4.10) app 레벨의 build.gradle 에 다음 내용과 같이 넣어주면 된다. android { . . . configurations.all { resolutionStrategy.dependencySubstitution { substitute module('org.hamcrest:hamcrest-core:1.1') with module('junit:junit:4.10') } }..
val versionCode = BuildConfig.VERSION_CODE val versionName = BuildConfig.VERSION_NAME 그동안 위의 방법으로 구현 했었다. 하지만 빌드 과정에서 BuildConfig 의 꼬임으로 잘 해결되지 않는 문제가 발생할 때가 있다. 잘 되다가 어쩌다가 한번 안되면 리부팅을 해도 안드로이드 스튜디오를 새로 시작해도 빌드 클린을 해도 해결이 안된다. BuildConfig.class 에 해당 VERSION_CODE 등이 등록되어 있지 않아서 이다. 이것은 자동으로 빌드되는 클래스 인데... 이유를 모르겠다. 잘 되다가 한번 안되면 안된다. 그래서 아래와 같은 방식으로 바꾸는게 정신 건강에 유익할 것 같다. val manager = this.package..
구글 파이어베이스의 구글 로그인을 개발하는데 하기와 같은 코드를 작성하게 된다. 구글에서 코드 스니펫을 가져와서 코딩을 하면 하기의 코드처럼 된다. 이때 R.string.default_web_client_id 라는 값이 분명히 String 리소스에 넣어줘야 하는데 이 값을 어떻게 넣어줘야 할지 막막했다. 인터넷에 많은 시간을 들여 검색해보면 하드코딩을 해라 뭐해라 어쩐다. 하지만 실제 해결책은 그게 아니다. 분명히 구글 파이어베이스에서 가져온 google-services.json 파일이 있고 이것을 app 아래에 복사해 넣었을 것이다. 그러면 그냥 Rebuild Project 를 하면 자동을 values.xml 에 빌드되어 들어간다. (리소스 레벨의 xml 이 아닌 generated 된 xml) 이러면 ..
자주 찾는곳이라 링크 함 https://developer.android.com/training/sign-in/biometric-auth?hl=ko 생체 인식 인증 대화상자 표시 | Android 개발자 | Android Developers 앱의 민감한 정보나 고급 콘텐츠를 보호하는 데는 얼굴 인식, 지문 인식 같은 생체 인식 인증을 요청하는 방법이 있습니다. 이 가이드에서는 앱에서 생체 인식 로그인 흐름을 지원하는 방법을 developer.android.com
build.gradle 에 다음 내용을 추가 android { ..... buildFeatures { viewBinding true } ..... } Activity 소스에 다음과 같이 binding 선언 class LoginActivity : USBSerialActivity() { private lateinit var binding: ActivityLoginBinding 이때 ActivityLoginBinding 이라는 것은 activity_login.xml 이라는 해당 레이아웃의 카멜표기법에 Binding 을 추가하여 자동으로 정해진다. 이제 다음과 같이 적용한다. 이전 방식의 코드 override fun onCreate(savedInstanceState: Bundle?) { super.onCreat..
private val digits = "0123456789ABCDEF" fun bytesToHex(byteArray: ByteArray): String { val hexChars = CharArray(byteArray.size * 2) for (i in byteArray.indices) { val v = byteArray[i].toInt() and 0xff hexChars[i * 2] = digits[v shr 4] hexChars[i * 2 + 1] = digits[v and 0xf] } return String(hexChars) } val bytes = byteArrayOf(10, 2, 15, 11) val s = bytesToHex(bytes) println(s) // output: 0A020F0B
Android, Kotlin object UniqueID { @SuppressLint("MissingPermission", "HardwareIds") fun getDeviceID(context: Context) : String { val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager return telephonyManager.deviceId } @SuppressLint("MissingPermission", "HardwareIds") fun getSimSerialNumber(context: Context): String{ val telephonyManager = context.getSyste..