개발자가 테스트 전달 전 확인사항

1. 구글 플레이 콘솔에서 Alpha 등록 확인하기

앱 선택 → "출시 관리" → "앱 버전" → 공개 트랙 or 비공개 트랙 확인하기

2. 지정된 테스트 여부 확인하기

공개 트랙 or 비공개 트랙 우측 "관리" → 테스트 참여 대상 관리 → 사용자 그룹 확인

3. 테스트 참여 URL 전달

테스트 참여자에게 URL 전달 후 테스트 참여 수락

(ex. https://play.google.com/apps/testing/com.sample.app)

*** 구글 플레이에 적용까지는 각 단말마다 다르게 시간이 걸릴 수 있음.**

테스트 참여자가 테스트할 경우

1. 전달받은 테스트 참여 URL에서 참여 수락

테스트할 폰의 계정으로 로그인 후 수락해야 함.

(폰의 Google 계정임)

(참고로 참여 URL은 각 앱마다 다름)

(ex. https://play.google.com/apps/testing/com.sample.app)

테스트 확인 후 정식 앱 확인이 필요할 경우 다시 테스트 참여 URL에서 프로그램 종료

*** 아래와 같이 뜰 경우 테스트 계정이 포함이 안되어 있는 경우이니, 담당 개발자에게 테스트 계정 추가를 요청.**

2. 테스트 단말에서 구글 플레이 실행한 후 테스트할 앱 검색.

아래와 같이 베타 테스트에 참여 중이라는 문구나 업데이트 날짜 등으로 베타 앱인지 체크

아래와 같이 베타 테스트에 대한 문구나 업데이트 날짜가 다르다면 담당 개발자에게 문의.

(대체적으로 구글 플레이에서 단말별로 업데이트 되는 시간이 달라 생기는 문제일 가능성이 큼)

3. 앱 설치 후 기능 테스트

앞으로 Google Play에 앱을 올릴 경우 64비트 대응이 되어야 올릴 수가 있다고 합니다.

 

https://developers-kr.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html

 

Google Play의 64비트 요구 사항에 맞춰 앱을 준비하세요

<블로그 원문은 이곳 에서 확인하실 수 있으며 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다> 게시자: Vlad Radu(Play 제품 관리자), Diana Wong(Android 제품 관리자) 64비트 CPU는 사용자...

developers-kr.googleblog.com

일정은 2019년 8월 1일 부터이며, 2021년 8월 1일부터는 64비트 대응이 안된 앱은 서비스 종료를 시킨다네요.

 

참 무서운 이야기이고, 뭘 해야하나 싶은 이야기입니다.

 

  • 네이티브 코드를 포함하는 모든 새 앱과 앱 업데이트는 Google Play에 게시할 때 32비트 버전 외에 64비트 버전도 함께 제공되어야 합니다.

Google Developer 블로그에는 위와 같이 설명이 되어 있습니다.

 

즉, 네이티브 코드를 쓰던 부분들이 문제가 되는 것으로 보이고요. 

 

제 경우엔 다음? 카카오? 맵 SDK가 해당이 되는 경우가 발생하였습니다.

 

맵 SDK가 so 파일로 제공이 되었지만, 64비트로는 아직 제공이 안되고 있는데요.

 

만약 개인이 직접 so 파일을 만들고 사용 중이라면 64비트짜리도 만들어 대응을 하셔야 합니다.

 

참고로 다음? 카카오? 맵 SDK는 다음주 초, 즉 2019년 7월 4주 초쯤에 대응이 될거 같다는 것 같습니다.

 

https://devtalk.kakao.com/t/topic/80108

 

Kakao DevTalk_

카카오 데브톡. 카카오 플랫폼 서비스 관련 질문 및 답변을 올리는 개발자 커뮤니티 사이트입니다.

devtalk.kakao.com

 

이번 시련도 다들 잘 넘어가시길 기원하겠습니다.

 

 


 

오늘(7/24) 확인해보니 7월 22일자로 카카오 지도 API 업데이트가 되었나 봅니다. 

 

http://apis.map.kakao.com/android/guide/

불러오는 중입니다...

다소 타이트하겠지만 기존에 쓰시던 분들은 대응이 되셔야 할 것 같네요.

 

행운을 빌겠습니다~

2017년도부터 방통위에서 앱들에서 사용하는 권한과 그 목적에 대해서 사용자에게 고지하도록 법률이 시행됨.

 

https://kcc.go.kr/user.do?mode=view&page=A05030000&boardId=1113&boardSeq=44546

 

 

방송통신위원회 누리집 > 알림마당 > 보도자료 상세보기(「스마트폰 앱 접근권한 개인정보보호 안내서」 발표)

보도자료 방송통신위원회 보도자료를 게시하고 있습니다.방송통신위원회 활동과 정책에 관련된 언론 보도자료를 게시하고 있습니다. 「스마트폰 앱 접근권한 개인정보보호 안내서」 발표 제목 「스마트폰 앱 접근권한 개인정보보호 안내서」 발표 담당부서 개인정보보호윤리과 작성자 이기훈 연락처 02-2110-1529 첨부파일  (보고 나)스마트폰 앱 접근권한

kcc.go.kr

 

안그래도 Android 6.0 부터 런타임 퍼미션에 대한 처리가 있던 터였지만 위 내용도 추가되었음.

 

사용자에게 친절하게 필수/선택적인 권한에 대한 안내가 필요하게 되었음.

 

그럴때 어떤 권한들을 어떻게 안내할지 등에 대한 고민들이 시작됨.

 

아래 링크를 참고해 작성하면 도움이 될 듯함.

 

https://developers-kr.googleblog.com/2019/01/get-your-apps-ready-for-64-bit.html

 

 

 

Google Play의 64비트 요구 사항에 맞춰 앱을 준비하세요

<블로그 원문은 이곳 에서 확인하실 수 있으며 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다> 게시자: Vlad Radu(Play 제품 관리자), Diana Wong(Android 제품 관리자) 64비트 CPU는 사용자...

developers-kr.googleblog.com

2019년 7월 19일 현재 위 링크에 설명되고 있는 권한 내용들임.

 

인앱 구매

앱이 사용자에게 앱 내에서 구매하도록 요청할 수 있습니다.

 

기기 및 앱 기록

앱은 다음 항목 중 하나 이상을 할 수 있습니다.

  • 중요한 로그 데이터 읽기
  • 시스템 내부 상태 검색
  • 웹 북마크 및 기록 읽기
  • 실행 중인 앱 검색

네트워크 데이터 설정

앱은 모바일 데이터 연결 및 수신 데이터를 제어하는 설정을 사용할 수 있습니다.

 

ID

앱이 기기 내의 계정 정보나 프로필 정보를 사용할 수 있습니다. ID 액세스는 다음 기능을 포함할 수 있습니다.

  • 기기에서 계정 찾기
  • 내 연락처 카드 읽기(예: 이름 및 연락처 정보)
  • 내 연락처 카드 수정
  • 계정 추가 또는 삭제

연락처

앱은 사용자 기기의 주소록을 사용하여 연락처를 읽고 수정할 수도 있습니다.

 

캘린더

앱은 기기의 캘린더 정보를 사용할 수 있으며 다음과 같은 기능을 포함할 수 있습니다.

  • 캘린더 일정 및 기밀정보 읽기
  • 소유자에게 알리지 않고 캘린더 일정을 추가하거나 수정하고 참석자에게 이메일 보내기

위치

앱은 기기의 위치를 사용할 수 있습니다. 위치 액세스는 다음을 포함할 수 있습니다.

  • 대략적인 위치(네트워크 기반)
  • 정확한 위치(GPS 및 네트워크 기반)
  • 추가적인 위치 제공업체 명령에 액세스
  • GPS 액세스

SMS

앱은 기기의 문자 메시지(SMS) 또는 멀티미디어 메시지(MMS)를 사용할 수 있습니다. 이 그룹에는 문자, 사진 또는 동영상 메시지를 사용하는 기능이 포함될 수 있습니다.

중요: 요금제에 따라 이동통신사에서 문자 또는 멀티미디어 메시지에 요금을 부과할 수 있습니다. SMS 액세스는 다음 기능을 포함할 수 있습니다.

  • 문자 메시지 받기(SMS)
  • 내 문자 메시지 읽기(SMS 또는 MMS)
  • 문자 메시지 받기(사진이나 동영상 메시지 등의 MMS)
  • 내 문자 메시지 수정(SMS 또는 MMS)
  • SMS 메시지 보내기(요금이 부과될 수 있음)
  • 문자 메시지 받기(WAP)

휴대전화

앱이 사용자의 휴대전화 및 통화 기록을 사용할 수 있습니다. 요금제에 따라 이동통신사에서 통화료를 부과할 수 있습니다. 전화 액세스는 다음 기능을 포함할 수 있습니다.

  • 전화번호로 직접 전화걸기(요금이 부과될 수 있음)
  • 통화 기록 쓰기(예: 통화 기록)
  • 통화 기록 읽기
  • 발신전화 경로 전환
  • 휴대전화 이용 상태 변경
  • 사용자의 조작 없이 전화 걸기

사진/미디어/파일

앱이 기기에 저장된 파일이나 데이터를 사용할 수 있습니다. 사진/미디어/파일 액세스는 다음 기능을 포함할 수 있습니다.

  • USB 저장소의 내용 읽기(예: SD 카드)
  • USB 저장소의 내용 수정 또는 삭제
  • 외부 저장소 포맷
  • 외부 저장소 마운트 또는 마운트 해제

카메라

앱이 기기의 카메라를 사용할 수 있습니다. 카메라 액세스는 다음 기능을 포함할 수 있습니다.

  • 사진 및 동영상 찍기
  • 동영상 녹화

마이크

앱이 기기의 마이크를 사용할 수 있습니다. 마이크 액세스는 음성 녹음 기능을 포함할 수 있습니다.

 

Wi-Fi 연결 정보

앱은 Wi-Fi 사용 설정 여부 및 연결된 기기의 이름 등 기기의 Wi-Fi 연결 정보를 사용할 수 있습니다. Wi-Fi 연결 정보 액세스는 Wi-Fi 연결을 볼 수 있는 기능을 포함할 수 있습니다.

참고: 앱은 대개 인터넷에 액세스하기 때문에 앱을 설치할 때 다운로드 화면에 Wi-Fi 연결 정보 권한 그룹만 표시됩니다. 앱 다운로드 화면에 '전체 인터넷 액세스' 권한을 계속 표시하지는 않지만, 상기 '특정 앱에 대한 모든 권한 표시' 지침을 통해 언제든지 전체 권한 목록을 확인할 수 있습니다.

 

블루투스 연결 정보

앱이 주변 블루투스 기기로 송신하거나 이에 대한 정보를 수집하는 등의 방식으로 블루투스를 제어할 수 있습니다.

 

웨어러블 센서/활동 데이터

앱이 웨어러블 센서(예: 심박수 측정기)의 데이터에 액세스할 수 있도록 허용합니다. 신체 활동 수준에 대해 정기적인 업데이트를 받을 수 있습니다.

 

기기 ID 및 통화 정보

앱은 기기 ID, 전화번호, 휴대전화 사용 여부, 통화 시 연결된 번호에 액세스할 수 있습니다. 기기 ID 및 통화 정보는 전화 상태 및 ID를 읽는 기능을 포함할 수 있습니다.

 

기타

앱은 기기 제조업체에서 제공한 맞춤설정이나 앱에 필요한 특정 권한을 사용할 수 있습니다.

중요: 앱이 '기타' 그룹의 권한을 추가한 경우 항상 업데이트를 다운로드하기 전 변경사항을 검토하라는 요청을 받게 됩니다.

기타 액세스는 다음 기능을 포함할 수 있습니다.

  • 소셜 스트림 읽기(일부 소셜 네트워크)
  • 소셜 스트림에 글 올리기(일부 소셜 네트워크)
  • 구독 피드 액세스

앱 다운로드 화면에 표시되지 않은 권한을 포함하여 Play 스토어에 표시된 '기타' 그룹의 권한을 모두 볼 수 있습니다.

 

Android 앱 개발시 EditText 에 키보드 옵션을 줄 수 있습니다.

흔히 주는 옵션으로는 `imeOptions``inputType` 등이 있지요. (아래 링크 참조)

 

https://developer.android.com/reference/android/text/InputType

불러오는 중입니다...

https://developer.android.com/training/keyboard-input/style

불러오는 중입니다...

 

imeOptions로 키보드에 버튼 타입 등을 조정할 수 있습니다.

(엔터 버튼 대신 `다음` 또는 `완료` 같은 키로 나오는 등)

 

inputType으로 키보드로 입력 가능한 타입을 정할 수 있습니다.

(비밀번호 입력 형태 등)

 

다만 안드로이드 단말 특성상 제조사별로 다른 키보드가 들어가 있다보니 작은 이슈가 있었습니다.

 

특정 앱에서 삼성 갤럭시 단말의 쿼티 자판으로 한글이 입력이 안되는 경우가 발견된 거죠.

(같은 단말 천지인 자판으로 변경 후는 한글이 잘 입력됨.)

 

재미있는 건 LG 단말에서는 쿼티 자판으로도 한글이 잘 입력됩니다.

 

그리고 넥서스 단말에선 아예 쿼티에서 한글 전환이 불가했고요.

 

확인 결과 문제가 발생하는 경우 inputType 값이 `textVisiblePassword`로 지정되어 있었습니다.

저 타입을 제거할 경우 정상적으로 한글이 잘 입력되더군요.

 

영어, 숫자만 입력이 가능하게 한 것이 목적이었던 것 같은데요.

아마 다른 방법을 찾아야 할 것으로 보이네요.

3일 전까지 문제없이 잘 돌아가던 안드로이드 프로젝트에서 갑자기 빌드가 안되는 문제가 발생하였습니다.

주말이 지났을 뿐인데 아래와 같은 로그와 함께 gradle sync도 안되는 문제였습니다.

org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':mymodule'.
...
Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'assemble' for task ':mymodule:assembleDebug' of type org.gradle.api.DefaultTask.

혹시나 하는 마음에 소스를 1년 전 껄로 돌려보아도 동일하고, 딱히 형상관리에 문제도 없어 보였죠.

gradle 살펴보던 중 가변적인 요소가 하나 눈에 들어왔고, 그 부분이 원인이었습니다.

classpath 'io.fabric.tools:gradle:1.+'

앱 최상위에 있는 build.gradle에 정의된 Fabric 설정이 문제였습니다.

혹시나 해서 Fabric 쪽 릴리즈 페이지를 찾아보이 3월 15일에 업데이트가 있었네요.

https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin

그 전 버전인 1.27.1 버전으로 수정 후 정상동작을 확인하였습니다.

//classpath 'io.fabric.tools:gradle:1.+'
classpath 'io.fabric.tools:gradle:1.27.1'


어제 구글플레이를 통한 APK 업로드가 무조건 오류가 떨어지는 사례들이 많이 나왔습니다.

국내 카카오톡 오픈채팅방 중 안드로이드 개발자 방에서도 이로 인해 어려움을 호소하는 분들이 많았었죠.

이에 대한 원인은 아직 정확히 못찾아봤는데요. 사람들은 아래 기사의 장애들로 인한 여파로 보는 것 같았습니다.


https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=105&oid=366&aid=0000429027


어쨋든 배포를 해야하는 개발자들에겐 큰 재앙같은 소식이었죠.

그나마 구글 쪽 문제였다는 걸 공유하고 받은 사람들은 구글 탓이라도 하였겠지만,

그런 소식을 못받은 사람들은 APK 에서 원인을 찾으려 삽질을 했을 수도 있겠죠.


구글에서는 자사 서비스의 상태를 아래 링크를 통해 확인할 수는 있습니다.


https://www.google.com/appsstatus#hl=ko&v=status


다만 구글 플레이는 없는 것 같아 문제는 여전하죠.

그래서 구글에서 직접 고지하는 건 아니지만 이런 장애 소식을 알려주는 곳이 있나 찾아보다가 아래 링크를 찾았습니다.


https://downdetector.com/status/google-play


구글 플레이에 장애 발생시 유저들이 그 장애에 대해 보고하는 사이트 같았습니다.

여기서 그래프 및 댓글들로 구글 플레이에 장애가 있는지 여부를 참고할 수 있을 것 같습니다.

앞으로 의심이 될때 한번씩 찾아봐야겠습니다.



Android OS 9 Pie 버전부터는 WebView에 일반적인 텍스트로 "http://" URL 접근이 막혔습니다. 

(tagetSdkVersion 28 이상일 경우)

증상 : WebView에서 Webpage not availablenet::ERR_CLEARTEXT_NOT_PERMITTED 오류 발생

참고 : https://developer.android.com/training/articles/security-config#CleartextTrafficPermitted

검색해보니 이를 수정하기 위해서는 3가지 방법이 있습니다. 

(https://stackoverflow.com/questions/45940861/android-8-cleartext-http-traffic-not-permitted)

  • res/xml/network_security_config.xml 추가

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">ebookfrenzy.com</domain>
        </domain-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">amazon.com</domain>
        </domain-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">nytimes.com</domain>
        </domain-config>
    </network-security-config>

    위 파일 추가 후 AndroidManifest.xml 에서 application에 networkSecurityConfig속성 추가

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ...>
        ...
        <application
            ...
            android:networkSecurityConfig="@xml/network_security_config" 

    이 방법은 network_security_config.xml 파일에 앱 내 텍스트로 사용할 URL들이 정의되어 있어야 함.

    cleartextTrafficPermitted 속성이 true일 경우 동작을 함.


  • AndroidManifest.xml 에서 application 의 usesClearTextTraffic 속성 수정

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ...>
        ...
        <application
            ...
            android:usesCleartextTraffic="true"

    이 방법은 텍스트 URL 을 무조건 허용하게 됨.


  • Android Manifest.xml에서 manifet의 targetSandboxVersion 속성을 사용 중일 경우 관련 내용 : https://developer.android.com/guide/topics/manifest/manifest-element#targetSandboxVersion

    위 관련 내용에 따르면 속성 값이 높을수록 보안 수준이 높아지며, 2일 경우 usesCleartextTraffic의 기본 값이 false가 됨. 그래서 이 속성의 값을 1로 변경해야함. 다만 Android 8.0 (API 26) 이상을 타겟팅하는 Android Instant Apps의 경우 이 속성을 2로 설정해야 함.

    <?xml version="1.0" encoding="utf-8"?>
    <manifest android:targetSandboxVersion="1">
        ...


우려하던 대로 2019.01.02일자로 또 바뀌었네요. 내용 추가합니다.




앱에서 최신 앱 버전을 체크하기 위해 구글플레이의 링크를 이용해 따시는 경우들이 종종 있습니다. 


서버가 있어 서버에 등록하고 쓴다면 좋겠지만, 앱 업데이트시 마다 변경해야 하고 서버 자체가 없는 경우도 있다보니..


편의상 아래 링크처럼 구글플레이의 앱 링크를 열어 html을 긁어서 사용하는 모양새들인데요.


http://gun0912.tistory.com/8


언제인지는 정확히 모르겠지만... 기존에 알던 html 양식이 바뀌었습니다...;;;; (아마 2018.12월말부터??)


위 블로그에서는 2가지 방식을 권하고 있지요. jsoup을 사용하는 방식과 HttpURLConnection을 사용하는 법이요.


 먼저 jsoup을 사용하는 경우 기존 아래 같은 부분이..


	Elements Version = doc.select(".content");

	for (Element mElement : Version) {
		if (mElement.attr("itemprop").equals("softwareVersion")) {
			return mElement.text().trim();
		}
	}


아래와 같이 바꾸시면 되고요.


	Elements Version = doc.select(".htlgb").eq(3);

	for (Element mElement : Version) {
		return mElement.text().trim();
	}


HttpURLConnection을 사용하는 방식으로 하셨을 경우는 아래의 부분을..

	String startToken = "softwareVersion\">";
	String endToken = "<";


아래와 같이 바꾸시면 됩니다. (2018.04.17 일자 내용 추가)


	String startToken = "<div class="BgcNfc">Current Version</div><span class="htlgb"><div><span class="htlgb">";
        // 2018.04.17일자 이전
	// String startToken = "<div class=\"BgcNfc\">Current Version</div><div><span class=\"htlgb\">";
	String endToken = "</span></div>";


또 바겼습니다. 아래와 같이 바꾸시면 됩니다. (2019.01.04 일자 내용 추가)


	String startToken = "<div class=\"BgcNfc\">Current Version</div><span class=\"htlgb\"><div class=\"IQ1z0d\"><span class=\"htlgb\">";
// 2019.01.04일자 이전 // String startToken = "<div class="BgcNfc">Current Version</div><span class="htlgb"><div><span class="htlgb">"; // 2018.04.17일자 이전 // String startToken = "<div class=\"BgcNfc\">Current Version</div><div><span class=\"htlgb\">"; String endToken = "</span></div>";

다만 위와 같은 방법은 구글플레이 html 양식이 바뀐다면 또 문제가 되겠지요.


가능하시다면 번거럽더라도 다른 방법을 찾는게 맞을듯 싶습니다.


아 추가로 기존에 HttpURLConnection의 메소드 타입을 GET, POST 상관없이 구글플레이 html을 받아올 수 있었는데요.


오늘 확인해보니 POST로 할 경우 html을 받아올 수 없더군요. GET으로 하셔야 합니다.


이상 구글플레이에서 앱 버전 따기 간단히 남겨봅니다.

앱 개발을 위해 안드로이드 OS 버전 대응이 필요한 시점들이 있다.


그를 위해 OS 버전별 차이점이 필요한 부분들도 있다.


검색하다 찾은 사이트이다. 


http://socialcompare.com/en/comparison/android-versions-comparison


비록 OS 버전별 사용자 차이점에 치중되어 개발 차이점이 없긴 하지만 아쉬운대로 참고할만 하다.


뒤져보면 이것저것 비교공유한 내용들이 있어 필요시 참고할만 하다.




OS 버전별 분포도도 추가한다.


출처 : https://developer.android.com/about/dashboards/index.html

VersionCodenameAPIDistribution
2.3.3 -
2.3.7
Gingerbread100.4%
4.0.3 -
4.0.4
Ice Cream Sandwich150.5%
4.1.xJelly Bean162.0%
4.2.x173.0%
4.3180.9%
4.4KitKat1913.4%
5.0Lollipop216.1%
5.12220.2%
6.0Marshmallow2329.7%
7.0Nougat2419.3%
7.1254.0%
8.0Oreo260.5%


위 도표는 Android Developer 사이트에서 퍼온 것으로 아래와 같은 내용이 본문에 있다.


"최신 Google Play 스토어 앱을 실행하고 Android 2.2 이상과 호환이 되는 기기를 반영합니다. 데이터의 각 스냅샷은 7일 전까지 Google Play 스토어를 방문한 모든 기기를 나타냅니다."


"2017년 12월 11일까지 7일 동안 수집된 데이터 배포율이 0.1% 이하인 버전은 표시되지 않습니다."


OS 버전 최근동향이 필요할시 참고하면 된다.

+ Recent posts