728x90
반응형

 

Firebase Analytics 패키지를 사용하던 중 새로운 버전이 나와 버전 업데이트를 진행했습니다.

 

Debug모드에서는 전혀 문제가 없었지만 스토어 배포를 하던 중에 'com.google.android.gms.permission.AD_ID' 권한에 대한 오류가 발생했습니다.

 

기본적으로 AD_ID 권한이 존재 하지만 광고 ID를 사용하지 않아 Paly Console에서 '광고' 앱 콘텐츠를 수정해줘야 합니다.

[!] Google Api Error: Invalid request - This release includes the com.google.android.gms.permission.AD_ID permission but your declaration on Play Console says your app doesn't use advertising ID. You must update your advertising ID declaration.

 

 

 

 

# Analytics version 20.1.1 릴리즈에서 해당 내용이 추가 되었습니다.

 

# Android 12, 13 광고 ID 요구사항 입니다.

https://developers.google.com/interactive-media-ads/docs/sdks/android/dai/android-12

 

Android 12 and 13 targeting requirements  |  IMA DAI SDK for Android  |  Google Developers

Send feedback Android 12 and 13 targeting requirements Stay organized with collections Save and categorize content based on your preferences. Advertising ID If your app uses the IMA SDK version 3.25.1 or higher, the SDK already automatically declares the c

developers.google.com

 

 

 

 

# 콘텐츠 수정 

Google Play Console에 진입해줍니다.

https://play.google.com/console

 

Google Play Console | Google Play Console

앱 및 게임이 성장할 수 있도록 사용자에게 도달하고 사용자 참여를 유도하는 데 도움이 될 도구, 프로그램, 통계를 이용하세요.

play.google.com

 

 

 

개발자 계정을 선택하고, 수정할 앱을 선택합니다.

 

앱 상세에 들어가면 좌측 하단에 '정책 및 프로그램' 메뉴에서 '앱 콘텐츠' 메뉴로 진입합니다.

 

 

 

'광고 ID' 항목에서 관리를 선택합니다.

 

 

'앱에서 광고 ID를 사용하나요?' 항목에서 '' 를 선택하고 아래 애널리틱스를 체크 하고 저장합니다.

 

 

# 마무리

위 변경된 정책은 심사를 거치게 됩니다.

 

심사에서 승인되면 권한에 대한 오류가 해결됨을 확인할 수 있습니다.

728x90
반응형
728x90
반응형

 

Android Studio 를 실행해 줍니다.

 

이전 글에서 Flutter Plugin 을 설치 했으니 아래와 같이 Start a new Flutter project 메뉴가 보이게 됩니다.

 

Start a new Flutter project 메뉴를 클합니다.

 

 

 

 

 

현재 4가지의 Project 를 생성할 수 있습니다. Application, Plugin, Package, Module을 만들 수 있습니다.

 

기본 선택인 Fultter Application 항목을 그대로 두고 Next 버튼을 클릭합니다.

 

 

 

name에 Project 이름을 대문자 없이 입력해줍니다.

 

SDK path 는 이전에 다운받았다면 연결을 해주고, 오른쪽 Install SDK... 을 클릭해서 다운로드 할 수 있습니다.

 

location은 프로젝트가 저장될 경로를 지정해줍니다.

 

Description은 프로젝트의 설명을 입력해줍니다.

 

확인 후 Next 버튼을 클릭합니다.

 

 

Package name 은 겹치지 않는 회사 domain을 입력하면 됩니다.

 

Android X와 Kotlin, iOS 지원하도록 체크하고 Finish 버튼을 클릭합니다.

 

 

 

기본적인 dart 언어로 되어진 Project 가 생성이 되었습니다.

 

728x90
반응형
728x90
반응형

Android와 iOS를 한번에 개발할 수 있는 플랫폼은 기존에도 있었습니다.

 

하지만 웹뷰 방식으로 제작되었다 보니 반응이 느리거나 디자인도 다르게 개발되기도 했습니다.

 

장점도 많고 단점도 있지만 네이티브와 비슷한 성능을 내는 Flutter 프로젝트를 진행해 보려고 합니다.

 

https://flutter-ko.dev/

 

Flutter - 가장 빠른 아름다운 네이티브 앱

Flutter(플러터)는 하나의 코드베이스로 모바일, 웹, 데스크톱에서 네이티브로 컴파일 되는 구글의 아름다운 UI 툴킷입니다. Flutter는 기존 코드와 함께 동작하고, 전세계 개발자와 조직에 쓰이고 있으며, 무료 오픈 소스입니다.

flutter-ko.dev

 

 

 

 

 

Flutter 설치 페이지로 이동합니다.

 

https://flutter-ko.dev/docs/get-started/install

 

설치

Flutter를 설치할 운영 체제를 선택해주세요:{{site.alert.note}} **Are you on Chrome OS?** If so, see the official [Chrome OS Flutter installation docs!](/docs/get-started/install/chromeos){{site.alert.end}}

flutter-ko.dev

 

 

 

 

링크를 클릭해서 들어가면 아래와 같은 OS별 설치 버튼이 보여집니다.

 

저는 OS X 를 사용하고 있으니 "맥OS" 를 클릭해서 설치 페이지로 이동하겠습니다.

 

 

 

 

설치 페이지로 진입했다면 Flutter SDK 다운 순서대로 진행합니다.

 

 

 

 

 

압축까지 풀어주었다면 환경변수에 등록을 해주어야 합니다.

 

저는 /Users/gigas/Documents/flutter 위치에 설치하였습니다.

 

flutter 경로로 진입해 아래의 명령어로 PATH를 등록하였습니다.

 

export PATH="$PATH:`pwd`/bin"

 

터미널에서 flutter doctor 명령어를 입력하면 아래와 같은 문구들이 보여집니다.

 

Flutter 라는 항목이 체크되어있다면 정상적으로 설치가 된겁니다.

 

 

 

 

간단하게 설치까지 완료해봤습니다.

 

설치 진행에 어려움이 있다면 댓글로 문의 해주시면 도움을 드리겠습니다.

 

728x90
반응형
728x90
반응형

 

토이프로젝트를 플레이스토어에 올려놓고 반년만에 시간을 내서 오류 업데이트를 하려고 했습니다.

 

수정 및 테스트를 완료하고 bundle & apk 를 추출하려고 하는데 keystore 비밀번호가 기억이 나지 않았습니다.

 

새로 다시 만들어야 하나라는 생각과 열심히 구글링을 통해 엄청난 방법을 찾았습니다.

 

 

 

 

 

Google 에서 제공하는 jar를 통해 비밀번호를 찾는 방식입니다.

java 7을 필요로 하며 해당 jar 파일과 key.jks, 그리고 찾을 비밀번호를 나열한 txt파일만 있으면 됩니다.

 

https://code.google.com/archive/p/android-keystore-password-recover/wikis/HowTo.wiki

 

Google Code Archive - Long-term storage for Google Code Project Hosting.

 

code.google.com

실행방법 

java -jar AndroidKeystoreBrute.jar <args>

가능한 인수

-m <1..3> Method -k <path> path to your keystore -d <path> dictionary (for method 2 and 3) -p use common replacements like '@' for 'a'(for method 3) WARNING - very slow!! -start <String> sets the start String for the password (for brute force) -w writes a new keystore with same password than the key -h prints helpscreen

무차별 대입

java -jar AndroidKeystoreBrute_v1.05.jar -m 1 -k <...keystore> -start AAAAAA

사전 대입

java -jar AndroidKeystoreBrute_v1.05.jar -m 2 -k "C:\\mykeystore.keystore" -d "wordlist.txt"

스마트 단어 목록 대입

java -jar AndroidKeystoreBrute_v1.05.jar -m 3 -k "C:\\mykeystore.keystore" -d "wordlist.txt"

 

 

 

 

 

위와 같이 3가지 방식을 지원합니다.

 

일반적으로 스마트 단어 목록으로 찾는걸 권장한다고 하여 같은 방법으로 진행하였습니다.

 

wordlist.txt 파일은 사진과 같이 엔터로 나열하면 됩니다.

 

 

 

 

이렇게 명령어를 입력해주시면 jar 가 실행됩니다.

java -jar [AndroidKeystoreBrute.jar 위치] -m 3 -k "key.jks 위치" -d "wordlist.txt 위치"

 

 

 

아래와같이 wordlist.txt에 입력되었던 문구를 알맞게 구성하여 찾게됩니다.

Number of keys in keystore: 1
Found alias: jeju b04.jks
Creation Date: Tue Jul 16 11:33:58 KST 2019

Start smart wordlist attack on key!!

Capitalize first letter
Current Pass: a || est. 0 Pass/Sec

Current Pass: 123412341234123458 || est. 31889 Pass/Sec

Current Pass: 4Asdfasdfb049 || est. 33290 Pass/Sec

Current Pass: 71Asdfasdf6 || est. 33841 Pass/Sec

...

Got Password in 36 seconds
Password is: xxxx for alias xxx.jks

For updates visit http://code.google.com/p/android-keystore-password-recover/

 

 

 

 

다른방식으로는 AndroidStudio의 Log를 분석하기도 하지만 위의 방법이 간단한것 같습니다.

 

만약 keystore 비밀번호를 분실하셨다면 낙담하지 마시고 꼭 찾으셨으면 좋겠습니다.

 

728x90
반응형
728x90
반응형

 

Layout에 이미지나 텍스트를 넣었지만 너무 내용물이 많아 화면에 넘어가는걸 처리하기 위해서 ScrollView Component 를 사용합니다.

 

거의 긴 내용이 필요한 화면에서는 필수라고 할 수 있죠.

 

일반적으로는 내용이 길어도 화면에 들어가면 상단부터 보여지게 됩니다.

 

 

 

 

하지만 ScrollView안에 RecyclerView를 넣었을때가 문제 입니다.

 

화면에 들어가면 ScrollView가 로드 된 후 RecyclerView가 로드 되기 때문에 RecyclerView가 로드된 부분에서 보여지게 됩니다.

 

의외로 이런 화면 구성이 간혹 기획되곤 합니다..

 

ScrollView 안에 RecyclerView가 있어도 상단에 보여지도록 처리를 해보겠습니다.

 

ScrollView Component 를 id 로 scrollView라고 정의 해보겠습니다.

android:id="@+id/scrollView"

 

 

 

ScrollView 자동스크롤

ScrollView.FOCUS_DOWN 은 하단으로 위치 하게 되는 옵션이고, ScrollView.FOCUS_UP 은 상단으로 위치 하게 되는 옵션입니다.

 

이외에도 여러가지 옵션이 있지만 여기서 다루지는 않겠습니다.

 

Kotlin 사용

scrollView.post {
	scrollView.fullScroll.ScrollView.FOCUS_UP)
}

 

Java로 사용

ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
scrollView.post(new Runnable() {
	@Override
    public void run() {
    	scrollView.funnScroll(ScrollView.FOCUS_UP);	
    }
});

 

 

 

로드가 된 후 맨 상단으로 가고 싶을 땐 Thread 처리하지 않는다면 옵션이 적용되지 않습니다.

 

특정 Component Click 이벤트가 발생하면 스크롤이 되도록 처리 해도 됩니다.

 

다양하게 사용할 수 있으니 많은 응용을 해보세요.

 

728x90
반응형
728x90
반응형

 

Android 화면을 회전하거나 멀티화면으로 보여진다면 Activity는 onDestroy를 수행하고 다시 onCreate를 호출합니다.

 

그 사이에 입력했던 값들이나 변수로 담았던 값들이 사라지게 됩니다.

 

이럴때 InstanceState 함수를 호출하여 값을 저장하고 다시 화면이 그려질때 불러오게됩니다.

 

 

 

 

override fun onSaveInstanceState(outState: Bundle?)

 

outState.put 함수를 통해 값을 저장합니다.

 

저장된 값을 화면이 다시 그려질때 불러오면 됩니다.

 

 

 

 

override fun onRestoreInstanceState(saveInstanceState: Bundle?)

 

saveInstanceState.get 함수를 통해 값을 불러옵니다.

 

각각의 필요한 값을 저장하고 불러오는 코드를 넣어주면 화면전환이 되거나 멀티화면으로 전환이 되었을때에도 값을 잘 출력할 수 있습니다.

 

 

728x90
반응형
728x90
반응형


Android는 XML 에서 디자인을 할 수 있습니다.


Drag & Drop 으로 쉽게 만들 수 있지만 정확한 값을 입력하기엔 더 번거로워 질 수 있습니다.


간단하게 버튼 디자인을 해보겠습니다.





일반적인 버튼입니다.


사각형의 디자인으로 정말 밋밋합니다.


    <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="LOGIN"/>
cs








버튼에 Radius 값을 넣어서 둥글고 이쁘게 만들어 보겠습니다.


res -> drawable 안에 새로운 XML을 만들어 줍니다.


이름은 편한이름으로 주면 됩니다.





버튼이 클릭되었거나, 비활성화 되었을 때가 있기때문에 selector로 만들어 주겠습니다.


item 은 각각의 상태를 정해줄수 있습니다.


item 안에 shape를 만들어 준다음 corners 로 버튼의 Radius 값을 정해줍니다.


solid 로 버튼의 색상을 지정합니다.


<selector xmlns:android="http://schemas.android.com/apk/res/android">
 
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="20dp"></corners>
            <solid android:color="@color/colorBlue"></solid>
        </shape>
    </item>

</selector>
cs






위에 만든 xml 을 설정해주면 상태에 따라 변화하게 됩니다.


    <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_blue"
            android:text="LOGIN"/>
cs



간단하게 버튼에 Radius 값과 색상을 넣어 멋지게 만들어줬습니다.

728x90
반응형

+ Recent posts