소곤소곤 ad

2025년 8월 19일 화요일

Android SDK 35 에서 Game View에서 Edge-to-Edge 구현

개발환경 : Android JAVA + libGDX  게임엔진


구글 플레이가 targetSDK 35를 강제하면서, 가장 크게 달라진 점

Edge-To-Edge 구현하면서, 나를 지독하게 괴롭혔던 것


 @Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
WindowCompat.setDecorFitsSystemWindows(getWindow(), true);
else
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

안드로이드 11, 즉 SDK.VERSION.SDK_INT가 30 (R) 이상인 경우, Edge-To-Edge를 "개발자가 구현"해야 하므로, setDecorFitsSystemWindows() 를   false로 하여야 한다. 


그 이전 버전에서는 OS가 알아서 하게 한다.  네비게이션 패널이 '고정'으로 존재하는 경우 예전버전에서는 그만큼의 영역이 삭제된 픽셀을 앱이 할당받았으나 R 이후에는 전체화면에서 시스템바로 인해 삭제되는 영역에 대한 처리를 개발자가 직접 구현해야 한다. 

일반 어플리케이션은 세심하게 구현하면 되지만, 게임 처럼 전체화면을 렌더링 영역으로 쓰는 경우에는 아주 복잡한 문제에 빠진다. 게임 UI를 시스템바가 가리는 경우가 생기기 때문이다. 

그래서, 아예 시스템바를 코드로 모두 사라지게 하는 방법으로 해결하였다. 

public static void setFull(Activity activity)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Build.VERSION_CODES.R API 30
final WindowInsetsController insetsController = activity.getWindow().getInsetsController();
if (insetsController != null) {
insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);

// WindowInsets.Type.systemBars()는 상태 바와 내비게이션 바를 모두 포함합니다.
insetsController.hide(WindowInsets.Type.systemBars());
insetsController.hide(WindowInsets.Type.displayCutout());

//insetsController.hide(WindowInsets.Type.statusBars()); // 상태 바만 숨기기
//insetsController.hide(WindowInsets.Type.navigationBars()); // 내비게이션 바만 숨기기
}
}
}

앱에서 텍스트입력을 받아야 하는 경우는, 키보드 표시가 또 문제가 된다.  입력영역을 키보드가 가려버릴 수 있기 때문에 이벤트 처리함수를 작성해야 한다. 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){
sendButtonParams.setMarginEnd(100); // dummy

ViewCompat.setOnApplyWindowInsetsListener(getWindow().getDecorView(), (v, insets) -> {
Insets imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime());
int keyboardHeight = imeInsets.bottom; // 키보드는 하단에 나타나므로 bottom 값을 사용

// 키보드 높이만큼 채팅 레이아웃을 위로 이동
if (mChatLayout != null) {
mChatLayout.setTranslationY(-(float) keyboardHeight);
}
return insets;
});
}
sendButton 의 오른쪽 마진을 둔다. 이 영역에 키보드와 함께 튀어나올 네비게이션바가 위치하게 된다. 이렇게 하지 않으면 네비게이션바가 sendButton을 가려버릴 것이다.  또, 텍스트 입력 Layout의 위치를 조절하여 입력창과 키보드가 모두 보이게 해야 한다. 






2024년 1월 19일 금요일

D-U-N-S DUNS 번호 발급 및 정보 변경

결론부터 :  발급은 쉽다.  조회할 방법이 없다.  정보변경은 ㅈ같다


애플 개발자들은 개발자사이트에서 발급이 가능하다고 한다. (난 애플 개발자가 아니다) 

구글플레이 개발자들은 필수적으로 Dun & Bradstreet (https://www.dnb.com/, 이하 DnB)  에서 D-U-N-S 번호 (이하 DUNS)를 발급받아 등록해야 하는데, 일반 등록은 무료다.  신청하고 발급받는것도 기초적인 영어 수준이라서 어렵지는 않다.

D-U-N-S 조회 : 불가능하다


그런데, 해당정보가 잘 등록되어 있는지 정보 조회를 하려고 하니 국가가 "U.S."로 고정되어 있어서, 우리나라로 변경이 불가능하기 때문에 조회할 수가 없다. 

등록정보를 변경하려고 해도 국가가 "U.S."로 고정되어 있어서, 우리나라로 변경이 불가능하기 때문에 조회할 수가 없다. 



사이트를 뒤지고 인터넷 검색을 다 해봐도, DUNS 번호로 회사를 조회하는 방법과 DUNS에 등록된 정보를 변경하는 방법을 찾을 수가 없었다. 그러다가 DnB의 우리나라 파트너회사가 있다는 사실을  알게 되었다. 




https://global.nicednb.com/servDunsApply01.do

바로 "나이스 DNB" 다.  이 회사는 DnB에서 "공짜"로 발행해주는 D-U-N-S 번호를 무려 45만원을 받고 발급해 주고 있다.  빨리 받고싶으면 70만원을 내라고 한다. 

최근에 구글이 회사 개발자계정 등록시 DUNS 입력을 의무화하면서 이 회사는 떼돈을 벌고 있을거 같다.   자, 나는 DnB에서 공짜로 DUNS 를 받았으니 45만원을 아꼈을까?  결론을 미리 얘기하자면 그건 아닌것 같다. 

어쨌거나 이곳에서 DUNS로 기업정보를 조회할 방법은 없다.   

애플 개발자 사이트는 어떨까? 개발자 계정 가진분에게 부탁해서 조회를 시도해 봤는데, 


 





DUNS로 조회를 하는게 아니라, 회사 정보를 잔뜩 입력하면 DUNS번호를 알려준다고 한다. (아무 쓸모없는 기능이다)

인터넷 검색으로 나오는 검색사이트들은 모두 운영 중단되어서 먹통이다. 

1. https://www.bisnode.de/upik-en/  연결안됨. (20년에 인수되었다고 한다)
2. https://dunsregistered.com/ 는 Globak Directory 라서 DB가 다른가?


D-U-N-S 정보변경 : 불가능한듯. 45만원을 내면 가능할듯?



현재까지 조사한 바에 의하면,

1) DUNS 정보변경이 필요한 경우에 dnb.com 에서는 "한국"회사들에게는 서비스를 지원하지 않는다.
2) 한국내 유일한 대행사인 "나이스DNB"를 방문해보라고 한다. 
3) 알아보니 나이스DNB는 DnB에서 발급한 DUNS라고 하더라도 정보갱신을 해준다고 한다.  대신 신규 절차를 밟아야 하고 서류 잔뜩(3년간 재무재표, 주주명부, 등기부등본등)을 제출하고 45만원을 내라고 한다. 

[주의] 틀린 정보가 있을 수 있습니다. 계속 업데이트 합니다.











2023년 10월 31일 화요일

Challenges in Developing and Launching on Android: Unveiling the Hurdles, 안드로이드로 개발과 출시가 어려운 이유



Due to Google Play policy changes, it became necessary to rebuild previously released apps.

Update of SDKs is imperative. The advertising ID used for user profiling in ad techniques clashed with privacy concerns, demanding significant changes in ad-related SDKs like AdMob and Unity Ads. Unfortunately, regular app developers merely integrate SDKs without control over their internals, relying on the SDK provider for fixes. Older, free SDKs often lead to troubleshooting without support.

Version upgrade in Google's in-app billing library: While version 1 sufficed for some time, an unexpected mandate to move from 3 to now 5 has emerged. It's feasible to follow minor version updates, but a major leap of two versions demands a complete rewrite.


Android Studio and the frustrating Gradle: Project folder structures, contained elements like gradle.bat, and the syntax within build.gradle constantly and inconsistently change. Consequently, projects left unattended for a year throw multiple errors and fail to build. Corrective actions involve meticulous adjustments while referencing successfully built projects.


Google's data security policies: Addressing various encrypted, policy-violating issues in Google’s policy requires resolution. Despite hints in Korean and cryptic help guides, Google often rejects submissions, providing kind yet cryptic reasons via email. The problem-solving process remains challenging due to the cryptic nature of the communications.


구글플레이 정책변화로 인해서 예전에 출시한 앱들을 다시 빌드할 필요가 있었다.
- sdk들의 업데이트가 필요하다. 광고ID, 즉 사용자 성향을 분석하는 광고기법이 개인정보보호와 역행한다는 것, 그래서 admob_sdk나 unity_ads_sdk 등에 가장많은 변화를 요구한다. 불행히도 일반 앱 개발자들은 sdk를 그냥 가져다 쓸 뿐 그 내부까지 컨트롤할수없기 때문에 sdk 제작사가 고쳐주길 기대할 수 밖에 없다. 무료, 게다가 좀 오래된 sdk들은 뭐 멘땅에 헤딩하는 수밖에 없다.

- 구글 인앱결제라이브러리의 버전업 : 버전1로도 잘 써 왔는데, 어느날부터 3이상을 강제하더니 이제는 5를 강제하는 지경이다. 마이너버전의 업데이트는 어찌어찌 따라갈 수 있지만 메이저버전 그것도 2개나 도약하는 sdk 버전업데이트는 한마디로 다시짜는 수준이다.

- 안드로이드 스튜디오 그리고 ㅈ같은 gradle : 프로젝트의 폴더구조, 그안에 포함된 gradle.bat 같은것들, build.gradle의 문법들, 이런것들이 너무 자주 개념없이+일관성없이+ㅈ같이 변한다. 그래서 1년 정도 열어보지 않은 프로젝트들은 온갖 오류를 뱉어내면서 빌드가 되지 않는다. 어쩌다 빌드에 성공한 프로젝트를 옆에 열어두고 참고하면서 한땀한땀 고쳐야 한다.

- 구글의 데이터 정책 : 이건 뭐 글자만 한글인 온갖 암호문같은 구글정책위반을 모두 해결해야 한다. 이해가 안될때에는 역시나 글자만 한글이고 온갖 암호문같은 도움말을 참고하라고 하지만, 거절당하기 일쑤이며, 구글은 거절당한 이유를 이메일로 친절하게 알려준다. 역시 글자만 한글이고 암호문같아서 문제해결이 안되는건 여전하다.




2023년 9월 24일 일요일

2016년 9월 19일 월요일

Galaxy Note 7 Secret Codes

  • To Check  IMEI number : *#06#
  • To lock the phone: #7465625*782*Code#
  • To Check   Diagnostic configuration : *#9090#
  • To Check  System Dump mode : *#9900#
  • To Check  Audio Loopback Control : *#0283#
  • To Check  Battery status ADC, RSSI reading : *#0228#
  • To Ceck Camera Firmware Update Status: *#34971539#
  • To Check  GSM status information : *#0011#
  • To Check  General Test Mode : *#0*#
  • To Check  Quick Test Menu : *#7353#
  • To Check  Software and hardware info : *#12580*369#
  • To Check  View SW Version PDA, CSC, MODEM : *#1234#
  • To Check  Product code : *#272IMEI#*
  • To Check  Buyer Code, S3 CSC Code : *#272*IMEI#
  • To Change USB Settings:  *#0808#
  • To To Check  Audio Loopback Control : *#0283#
  • To To Check  software version: *#1111#
  • To reset total call time: *#22558463#
  • To Show  Camera Firmware Menu: *#34971539#
  • To Check  Insert Network Lock Keycode : #7465625*638*#
  • To Check  TSP / TSK firmware update : *#2663#
  • To Check  Hardware Version  : *#2222#
  • To Enter Service Mode : *#32489#, *#0011#


  • *#06# To check IMEI No.
  • *#9090# – Diagnostic Configuration
  • * #1234# to check software version of phone.
  • *#272*IMEI# – Reset User data + Change Sales Code
  • *#12580*369# to check software and hardware information.
  • *#0228# Battery status (ADC, RSSI reading)
  • *2767*3855# Full factory reset (Don’t dial it does not ask you to confirm unless you have problem)
  • *#0*# This Code shows Screen Test Menu (LCD Test Menu) Hidden Menu
  • *#283# Audio LoopBack Control
  • *#07# Test History (SAR Level)
  • *#228# ADC Reading (Battery Status)
  • *#7353# Self Test Mode (2nd Hidden Menu


2016년 8월 22일 월요일

Technical note for reverse engineering & hack for Pokemon GO, 포켓몬GO 해커들과의 전쟁

포켓몬 go가, 각종 핵 프로그램들로 인해 몸살을 앓고 있다. 제대로 막아내지 못하면 망게임 될 듯.

그건 그렇고 해커들에 의해, 뼈와 살이 분리(?)되는 과정을 옆에서 관심있게 구경하다 보니, 몇 가지 기술적인 부분들이 눈에 띄어서 적어두고자 함.

1) 포켓몬고는 Unity3d 엔진을 이용. 스크립트가 리버스엔지니어링에 의해 홀라당 노출되는 것을 막기 위해 바이너리코드화(IL2CPP)

2) 포켓몬고는 서버와 당연히 SSL로 암호화된 통신을 한다. 그럼에도 해커들은 MITM 프록시를 이용하여, 주고받는 통신내용을 얼마든지 들여다본다. https://mitmproxy.org/

3) 포켓몬고의 실제 메세지통신은 구글의 protobuf를 이용한다. https://developers.google.com/protocol-buffers/

4) 해커들은 공식앱의 인증을 우회하는 방법을 알아냈다. (비공식 앱들이 공식앱인것처럼 할 수있게 되었다) Cerficitaion Pinning https://eaton-works.com/2016/07/31/reverse-engineering-and-removing-pokemon-gos-certificate-pinning/

5) 위치를 속이는 방법 및 이것을 검출하는 방법의, 장군멍군 싸움.
Fake GPS, Mock Location 검출 우회, 루팅디바이스를 이용하여 system app으로 동작시키는 방법.

6) 안드로이드, 강력한 후킹툴 Xposed Framework http://repo.xposed.info/module/de.robv.android.xposed.installer

7) 검사를 무력화하여 착한척하기 : Root Cloaking http://www.droidopinions.com/bypass-pokemon-go-root-detection-without-pokepatch-on-android/

8) 정말 흥미진진하게 지켜봤던 Unknown6 Issue (통신내용중에 해커들이 아직 이해하지 못한 필드들이 여럿이 있었는데... 개발사는 이걸 이용하여 해커들을 전멸시켰으나... 후략 )

영구밴 & 소프트밴 & 테크니컬밴등의 기술적 대응과, 개발사의 법적조치경고(C&D)에도 불구하고 해커들과의 전쟁은 아직 진행중...

이쪽 문제가 어느정도 해결되기 전에는 아이템교환기능/트레이딩 기능은 집어넣지 못할듯. 온라인게임은 경제가 파탄나면 끝장남.

2016년 2월 23일 화요일

apk의 서명 확인하기. How to get a signature from an apk

$ keytool -list -printcert -jarfile theapp.apk
Signer #1:

Signature:
Owner: CN=***, OU=***, O=xxx Project, L=Mountain View, ST=CA, C=US
Issuer: CN=***, OU=***, O=xx Project, L=Mountain View, ST=CA, C=US
Serial number: 509f6d47
Valid from: Sun Nov 11 18:17:59 KST 2012 until: Thu Mar 29 18:17:59 KST 2040
Certificate fingerprints:
         MD5:  A7:E9:93:81:E9:F2:10:0E:48:39:AB:48:34:F3:93:67
         SHA1: 2F:DD:51:D9:AD:71:BA:AB:18:2B:2F:09:AC:4D:8E:AB:A8:E3:DE:F9
         SHA256: DD:5D:41:07:31:3B:A8:FD:1F:A8:F4:56:EF:81:49:94:36:00:FF:85:73:F9:B1:D8:C2:FC:ED:51:F5:52:8D:EE
         Signature algorithm name: SHA1withRSA
         Version: 3

2015년 8월 6일 목요일

인그레스 하기 좋은 폰 (GPS 관점에서). Better devices for playing Ingress with the location service.

■ GPS 말고도 다른것들이? 

인그레스는 위치기반 게임이기 때문에, 현재 위치를 정확하게 빨리 잡아내는 것이 매우 중요하다. 흔히들 GPS를 위치정보라는 말과 동일시 하는데, 사실 GPS는 미국이 주도하는 위성위치정보시스템들을 이야기 하는 것이고, 다른 국가들도 이에 대응하여 위성위치정보 시스템들을 개발해서 운영하고 있다.

대표적인 것이 러시아의 GLONASS, 유럽의 Galileo. 그리고 비교적 최근의 일본,중국(Beidou) 위성들을 이용한 위치정보 시스템들이 있다.

당신의 위치, 실외등의 다른 조건이 동일하다고 할 때에 현재 위치를 정확하고 빠르게 잡아 내려면 보다 많은 위성 정보를 수신할 수 있는 스마트폰이 절대적으로 유리하다.

비교적 최근 스마트폰들은 이것들중 복수개의 위성위치정보시스템을 지원하지만 스마트폰 기종별로 조금씩 다르다는 사실.


■ 스마트폰 기종별로 수신하는 위성위치정보시스템이 다르다.



우리나라 휴대폰들이 GLONASS를 지원하기 시작한게 갤럭시S3, 노트2, 옵티머스G 부터니까 사실 얼마되지 않았다. 아이폰은 아이폰4부터 글로나스를 지원한다.

눈여겨 볼점은 중국의 Beidou 위성시스템인데, 우리나라가 중국 바로 옆에 있는 덕택에(?) 이 시스템을 지원하면 엄청난 혜택을 보게 되는것. 삼성의 갤럭시 S5이후 노트4 이후 기종이 이를 지원한다. 


■ 실제 테스트 

GPS Status 앱 (설치 https://play.google.com/store/apps/details?id=com.eclipsim.gpsstatus2)을 이용하면 현재 내 머리위에 있는 위성들의 존재를 알 수 있다.


갤럭시 S3 LTE 

GPS, GLONASS,일본위성(193번)까지 잡는다.

갤럭시 S5 

중국 Beidou까지 지원한다. 200번대 위성정보까지 수신하는 걸 볼 수 있다.


LG 옵티머스 G

수신률이 좋은 편이지만  아쉽게도 일본,중국 위성 정보를 수신하지 않는다.


LG G3

역시 위성 수신률은 좋은편이지만 중국,일본 위성 지원하지 않는게 아쉽다.



Apple iPhone 4

아이폰4부터는 GLONASS를 지원한다. 하지만 최근버전인 아이폰6도 일본/중국 위성을 지원하지 않는다.


결론, 삼성 갤럭시 S5, 노트4 이후 기종이 위성위치정보 수신범위가 제일 넓다. 


참고, Glonass를 지원하는 스마트폰 목록은

참고로, Beidou를 지원하는 삼성 갤럭시 기종은, 

※ 이 글은 앞집꼬마님의 게시글 http://2222222.tistory.com/99 을 참고로 작성한 것입니다. 링크글 원문 보시면 보다 많은 유용한 정보들이 있습니다.


2015년 7월 2일 목요일

프리덤 인앱결제 크랙 막기 (서버없이)

프리덤으로 인앱 결제를 하는 것을 막기위해, 일반적으로 서버를 두고 별도 검증을 하는 것이 필수적인데, 왜 그래야 할까?
인앱결제과정에서 가짜영수증과 가짜서명이 자체 검증(Secure.verify)을 문제없이 통과하게 되는데, 프리덤에서 이 부분을 무조건 true로 리턴하는 패치를 삽입하는 듯하다. 
java.security.Signature.verify()를 따라가다 보면, abstract protected로 설정된 engineVerify 함수를 만나게 되는데, 이 부분이 굉장히 의심스럽다(고 한다).
그래서, 이 부분을 직접 구현하는 시도가 있었고 아직까지는 성공적으로 동작한다(고 한다).

원문 (http://stackoverflow.com/questions/21966369/protecting-in-app-purchases-from-freedom-hack) 을 살펴보면,

The current implementation of freedom is that it will replace (redirect) all the method calls of java.security.Signature.verify(byte[]) to a freedom's jni method which in turn just simply always return true (or 1).
Take a look at java.security.Signature.verify(byte[]):
 public final boolean verify(byte[] signature) throws SignatureException {
        if (state != VERIFY) {
            throw new SignatureException("Signature object is not initialized properly");
        }
        return engineVerify(signature);
    }
Here the engineVerify method is an abstract protected method which is first defined in java.security.SignatureSpi(Signature extends SignatureSpi). OK, that enough, because I can't believe java.security.Signature.verify(byte[]) method anymore, I would use engineVerifymethod directly. To do that, we need to use reflection. Modify the verify method of IABUtil/Security from:
public static boolean verify(PublicKey publicKey, String signedData, String signature) {
        Signature sig;
        try {
            sig = Signature.getInstance(SIGNATURE_ALGORITHM);
            sig.initVerify(publicKey);
            sig.update(signedData.getBytes());
            if (!sig.verify(Base64.decode(signature))) {
                Log.e(TAG, "Signature verification failed.");
                return false;
            }
            return true;
        } catch (...) {
            ...
        }
        return false;
    }
To:
public static boolean verify(PublicKey publicKey, String signedData, String signature) {
        Signature sig;
        try {
            sig = Signature.getInstance(SIGNATURE_ALGORITHM);
            sig.initVerify(publicKey);
            sig.update(signedData.getBytes());
            Method verify = java.security.SignatureSpi.class.getDeclaredMethod("engineVerify", byte[].class);
            verify.setAccessible(true);
            Object returnValue = verify.invoke(sig, Base64.decode(signature));
            if (!(Boolean)returnValue) {
                Log.e(TAG, "Signature verification failed.");
                return false;
            }
            return true;
        } catch (...) {
            ...
        }
        return false;
    }
That is simple but it works with the current implementation of freedom until they update its algorithm in the future. (BTW, if you want to test if this works or not, this is my simple app).


즉, Security의 verify를 위 코드처럼 바꾸면, 프리덤이 바꿔치기한 (무조건 true를 리턴해주는) engineVerify를 무시하고 직접 검증할 수 있다. 
서버를 두지 않고, 인앱결제를 검증하는 경우에는 아주 간단하고 유용한 방법이다. 실제로 프리덤을 막아낼까? 이 코드를 작성한 사람이 직접적용한 앱을 가지고 테스트 해보자. https://play.google.com/store/apps/details?id=com.rainbowedu.toeicguru 



2015년 6월 26일 금요일

webview에서 새창으로 브라우저 열기, Opening new browser from webview

Webview를 이용하여 웹페이지를 앱내부에 넣는 것은 그리 어렵지 않다. 그런데, 보다 복잡한 곳으로의 링크를 webview아닌 브라우저를 이용해서 하도록 하고 싶을 때가 있다.

또, 내 경우는 웹뷰내에 Adsense 구글광고가 들어 있는데 이용자가 이 것을 클릭했을때에 처리가 되지 않는 문제가 있어서 별도 브라우저를 구동시키는 방법이 필요했다.


 mWebView.setWebViewClient (
  new WebViewClient () {
   @Override        
   public boolean shouldOverrideUrlLoading (WebView view, String url) 
   {             
    view.loadUrl(url);             
    return true;
   }
  }
 );


shoulOverrideUrlLoading 에서 url 이 내 페이지가 아닌 경우 브라우저를 실행시키면 될거 같았는데, 안타깝게도 이 아이디어는 동작하지 않는다.

stackoverflow.com 에서 찾아낸 아이디어는, ChromeClinet를 이용해서 새로운 WebView를 만든다음에, 그 안쪽의 shoulOverrideUrlLoading 에서 브라우저를 구동시키는 것이다. 이게 무슨 복잡한 방법이냐 싶은데...  잘 돌아가니 OK!


 WebSettings webSetting = mWebView.getSettings();

 webSetting.setJavaScriptEnabled(true); 
 webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
 webSetting.setSupportMultipleWindows(true);


 mWebView.setWebChromeClient(new WebChromeClient() {
         @Override 
         public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg)
         {
          // return true or false after performing the URL request
          WebView newWebView = new WebView(MyActivity.this);
                view.addView(newWebView);
                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(newWebView);
                resultMsg.sendToTarget();

                newWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                        browserIntent.setData(Uri.parse(url));
                        startActivity(browserIntent);
                        return true;
                    }
                });          
          return true;
         }
        });

        mWebView.loadUrl ("...");

2015년 6월 10일 수요일

Display the Loading Dialog for android system 안드로이드 시스템 로딩 아이콘 표시하기

앱을 만들다보면, 어떤 오래걸리는 작업중에 로딩을 표시하고픈 일이 자주 있는데, 이미지를 그리고 레이아웃을 잡고 애니메이션을 시키고 하는 일을 직접 다 하려고 보면 엄두가 안난다.

뭔가 쉽게 로딩화면을 표시해주는 방법이 없을까? 바로 ProgressDialog를 사용하는 것이다. 한 줄이면 끝난다.

ProgressDialog dialog = ProgressDialog.show(context, "", "Loading. Please wait...", true);





없어지게 하고 싶으면, dialog.dismiss(); 끝.

2015년 3월 10일 화요일

스마트폰 하드웨어 정보 모음

제조사 휴대폰명 애칭 모델번호 해상도 Network CPU
LG 옵티머스G 옵쥐 F180 HD 1280x720    
  옵티머스G Pro 옵쥐프로 F240 FHD 1920x1024 LTE  
  옵티머스GX 옵쥐엑스 F310 FHD 1920x1024    
  옵티머스GK 옵쥐엑스 F220 FHD 1920x1024    
  옵티머스 뷰 옵뷰2        
  옵티머스 뷰2 옵뷰2 F200      
  옵티머스 LTE3 옵티삼 F260 HD 1280x720    
삼성 갤럭시노트 갤노트 SHV-E160 HD 1280x720   1.5x2
  갤럭시노트2 갤노트2 SHV-E250 HD 1280x720   1.6x4
  갤럭시 S3 3G 갤3지 SHV-M440 HD    
  갤럭시 S3 LTE 갤3 SHV-E210 HD    
  갤럭시 S4 미니 갤4미니 SHV-E370      
  갤럭시 그랜드 갤그랜 SHV-E270 WVGA    
  갤럭시 넥서스 갤넥 SHW-M420 HD    
  갤럭시 S5 프라임/광대역 갤오프 G906 QHD 2560x1440 LTEx3  
  갤럭시탭 갤탭 SHW-M180 WSVHGA    
팬텍 베가아이언 베아 IM-A870   LTE  
  베가 LTE-A 베티아 IM-A880   LTE-a  
  베가 NO.6 베넘식 IM-A860   LTE  
  베가 R3 베알삼 IM-A850   LTE  
  베가 S5 베스파 IM-A840   LTE  




Samsung Galaxy S3 (c1skt)
Samsung Galaxy Note2 (t0lteskt)
Samsung Galaxy S2 (SHW-M250S)
LGE LG G2 (g2)
Samsung Galaxy S3 (c1ktt)
AppPlayer
Samsung Galaxy Note2 (t0ltektt)
Samsung Galaxy S2 (SHW-M250K)
LGE LG Optimus G (geehrc4g)
Samsung Galaxy S3 (m0skt)
LGE LG Optimus G Pro (geefhd)
Samsung Galaxy S4 LTE-A (ks01lteskt)
Samsung Galaxy S3 (c1lgt)
Samsung Galaxy Note3 (hlteskt)
Samsung Galaxy Note2 (t0ltelgt)
Samsung Galaxy Note (SHV-E160S)
LGE Optimus Vu2 (vu2kt)
Samsung Galaxy S4 Mini  (serranoltektt)
LGE LG Optimus G (geehrc)
Samsung Galaxy Note (SHV-E160K)
Samsung Galaxy Win (deloslteskt)
LGE LG Optimus G Pro (geefhd4g)
Pantech IM-A870S (ef52s)
Pantech IM-A870L (ef52l)
LGE TBD (aka)
Samsung Galaxy Note (SHV-E160L)
Samsung Galaxy Pop (superiorlteskt)
Samsung Galaxy Note3 (hltelgt)
Samsung Galaxy Note (GT-N7000)
Pantech EF34K (ef34k)
Samsung Galaxy S4 (ks01ltektt)
Samsung Galaxy S2 HD LTE (SHV-E120S)
LGE Optimus Vu2 (vu2sk)
Samsung Galaxy Note3 (hltektt)
Pantech IM-A850L (ef50l)
Pantech IM-A850S (ef48s)
Pantech IM-A830L (ef46l)
Samsung Galaxy S2 (SHW-M250L)
Pantech IM-A840S (IM-A840S)
Pantech IM-A850K (ef49k)
Pantech IM-A860S (ef51s)
Samsung Galaxy S (SHW-M110S)
LGE G Pro2 (b1)
Samsung Galaxy S4 (ks01ltelgt)
Pantech EF33S (ef33s)
LGE LG Optimus LTE3 (fx1sk)
Samsung Galaxy S3 (m0)
LGE LG optimus LTE2 (d1lu)
LGE LG Gx (omega)
Samsung Galaxy S4 (jalteskt)
Pantech IM-A830S (ef47s)
LGE LG optimus LTE2 (d1lkt)
Pantech IM-A870K (ef52k)
Pantech IM-A860L (ef51l)
LGE LG G3 (g3)
Samsung Galaxy S2 (GT-I9100)
Samsung Galaxy S4 (ja3g)
Samsung Galaxy Win (delosltelgt)
Samsung Galaxy S4 (jaltelgt)
LGE G3 Beat (jagn)
Samsung Galaxy S2 (SHV-E110S)
LGE Optimus Vu2 (vu2u)
Samsung Galaxy S5 (lentislteskt)
Pantech VEGA Secret UP (ef62l)
Pantech IM-A860K (ef51k)
Samsung Galaxy M Style (SHW-M340S)
Samsung Galaxy Note4 (trelteskt)
Samsung Galaxy Grand2 (ms01ltektt)
Samsung Galaxy S5 (kltektt)
Samsung Galaxy S5 (klte)
Pantech IM-A880S (EF56S)
Samsung Galaxy Note3 Neo (frescolteskt)
Pantech IM-A830K (ef45k)
Samsung Galaxy Grand (baffinltektt)
Samsung Galaxy Note II (t03g)
LGE PRADA 3.0 (p2)
Samsung Galaxy Note3 Neo (frescoltektt)
Pantech VEGA Secret Note (EF59S)
Samsung Galaxy S5 (kltelgt)
LGE LG F70 (f70n)
Pantech VEGA Secret UP (ef61k)
Pantech IM-840SP (IM-A840SP)
LGE LG G3 Cat.6 (tiger6)
Samsung Galaxy S4 (jaltektt)
Pantech IM-A830KE (ef45kv)
Samsung Galaxy S5 (klteskt)
Pantech Vega LTE M (ef65l)
LGE VU3 (vu3)
Samsung Galaxy Grand2 (ms01ltelgt)
Samsung Galaxy S4 Active (jactivelteskt)
Samsung Galaxy Player 5.8 (harrisonkrktt)
LGE Optimus GK (gvfhd)
Pantech IM-A810K (ef40k)
LGE LG optimus LTE2 (d1lsk)
LGE Optimus 3D MAX (cx2)
Samsung Galaxy Note 10.1 (p4notewifiany)
LGE Optimus LTE (i_skt)
Samsung Galaxy Core Advance (cane3gskt)
Samsung Galaxy Core Safe (arubaslimss)
Samsung Galaxy Tab 8.9 (SHW-M305W)
Samsung Galaxy S2 HD LTE (SHV-E120L)
Samsung Galaxy S2 HD LTE (SHV-E120K)
KT Tech KM-S330 (s330)
LGE Optimus LTE (i_u)
Samsung Galaxy Note3 (hlteatt)
Samsung Galaxy Player 5.8 (harrisonkrlgt)
Pantech VEGA Secret Note (EF59K)
Samsung Galaxy Note4 (treltelgt)
Samsung Galaxy Nexus (maguro)
Samsung Galaxy S5 (lentisltektt)
LGE LG G Pad 8.3 homeBoy (awifi070u)
Samsung Galaxy Note4 (treltektt)
Samsung Galaxy S5 (lentisltelgt)
Pantech VEGA Secret UP (ef60s)
Pantech IM-A800S (ef39s)
LGE Optimus Vu (batman_lgu)
Samsung Galaxy Tab 10.1 (SHW-M380W)
Pantech VEGA Secret Note (EF59L)
LGE LG Gx (omegar)
Samsung Galaxy R-Style (jaguark)
Huawei H60-L04 (hwH60)
Samsung Galaxy 070 (hendrix)
Samsung SM-T255S (q7lteskt)
Samsung Galaxy Grand2 (ms01lteskt)
Samsung Galaxy Tab3 7.0   (lt02wifilgt)
Pantech EF35L (ef35l)
Samsung Galaxy Grand-Max (grandmaxltekx)
Samsung Galaxy Alpha (slteskt)
SK Telesys ITP-R208W (rk30sdk)
Google Nexus 7 (2012) (grouper)
Samsung Galaxy Note3 Neo (frescoltelgt)
Samsung Galaxy Tab2 7.0 (espressorf)
Pantech IM-A810S (ef40s)
Samsung Galaxy Grand (baffinlteskt)
LGE Optimus Big (justin)
Samsung Baffin (baffinltelgt)
Pantech AT1 (at1)
Samsung Galaxy U (SHW-M130L)
Samsung Galaxy Mega 6.3 (meliusltelgt)
Samsung Galaxy Tab2 10.1 (espresso10wifi)
Pantech IM-A910S (ef63s)
LGE Optimus Q2 (bssq_450-06)
Samsung Galaxy Grand (baffinveskt)
Samsung Galaxy A5 (a5ulteskt)
Samsung Galaxy Tab 10.1 (SHW-M380S)
Motorola XT910 (umts_spyder)
Samsung Galaxy Alpha (sltelgt)
KT Tech KM-S220 (s220)
Samsung Galaxy Note 10.1 (p4noteltelgt)
Pantech IM-A910K (ef63k)
LGE G Pad 10.1 (e9wifin)
LGE Optimus Vu (batman_skt)
LGE LG G Pad 8.3 (awifi)
Samsung Galaxy Player (YP-GB70)
Samsung Galaxy Tab 10.1 (SHW-M380K)
LGE L70 (w5n)
Motorola Atrix (olympus)
Samsung Galaxy Mega 6.3 (meliuslteskt)
Samsung Galaxy K Zoom (m2altelgt)
Google Nexus 7 (flo)
Samsung Galaxy Tab2 10.1 (espresso10rf)
Pantech VEGA Secret UP (EF61K)
LGE LG G Flex (zee)
Samsung Galaxy Note Edge (tbelteskt)
Samsung SHW-M480S (p4noterfskt)
Samsung Galaxy Note 10.1 (p4noterf)
Samsung Galaxy Note 10.1 (p4noteltektt)
Samsung Galaxy S4 Zoom (mprojectltelgt)
Samsung Galaxy Note 10.1 (lt03ltelgt)
LGE G3 Screen (liger)
LGE LG Optimus LTE Tag (lge_120_kt)
Samsung Galaxy Note 8.0 (konawifiany)
Samsung Galaxy Tab2 7.0 (espressowifi)
Pantech IM-A910L (ef63l)
KT Tech TAKE SUIT (e100)
LGE Optimus Vu (batman)
LGE Gx2 (b2ln)
Samsung Galaxy Tab 8.9 (SHV-E140S)
LGE Optimus EX (x2_450-05)
LGE LG G3 A (tigers)
KT Tech KM-S120 (s120)
Samsung Galaxy Note 10.1 (p4noterfktt)
SK Telesys All&G PAD (mypad2)
Samsung Galaxy Note 10.1 2014 Edition (lt03wifikx)
Samsung Galaxy Note 8.0 (kona3g)
Samsung Galaxy R-Style (jaguarl)
Google Nexus S (crespo)
LGE LG Optimus 3D (cosmopolitan)
LGE LG Connect 4G (cayman)
Samsung Galaxy A5 (a5ultektt)
Samsung Galaxy player 70 Plus (YP-GB70D)
Samsung Galaxy Tab (SHW-M180L)
Samsung Galaxy K (SHW-M130K)
Pantech VEGA Secret UP (EF60S)
Samsung Galaxy Alpha (sltektt)
KT Tech KM-S300 (s300)
KT Tech EV-S100 (s100)
HTC HTC_X515E (rider)
Samsung Galaxy Tab4 10.1 (matissewifikx)
LGE Optimus Big (lu6800)
Samsung Galaxy Tab3 7.0 (lt02ltetmo)
LGE Optimus Vu (lge_325_skt)
LGE LG Optimus LTE Tag (lge_120_skt)
LGE Optimus Black (ku5900)
Samsung Galaxy R-Style (jaguars)
Barnes and Noble NOOK짰 HD (hummingbird)
HTC HTC Velocity 4G (holiday)
Samsung Galaxy Note3 (ha3g)
Pantech Vega X (ef18k)
Pantech ef14lv (ef14lv)
Pantech Mirach (ef13s)
Samsung Galaxy A5 (a5ultelgt)
Samsung Galaxy Tab (SHW-M180S)
Samsung Galaxy Tab 8.9 (SHV-E140L)
Motorola Defy (umts_jordan)
LGE Optimus One (su370)
KT Tech KM-S200 (s200)
Samsung Galaxy Mega 6.3 (meliusltektt)
LGE Optimus One (lu3700)
LGE LG-LU3100 (lu3100)
Samsung Galaxy Note 10.1 (lt03lteskt)
Samsung Galaxy Tab3 7.0 (lt02wifi)
Samsung Galaxy S5 (k3g)
Samsung Galaxy Tab3 Lite (goyawifi)
Samsung Galaxy TabS 10.5  (chagallwifikx)
LGE Optimus Black (black)
Samsung Galaxy A (archer)
Samsung Galaxy A7 (a7lteskt)
Samsung Galaxy Player 4 (YP-GB1)
Samsung Galaxy S (SHW-M190S)
Samsung SHV-E150S (SHV-E150S)
HP 7 Tablet (Mesquite)
Sony Xperia Z2 (D6503)
NEC G?셻One CA-201L (CA201L)
Sony Ericsson Xperia Z1 (C6903)
LGE LG-KU8800 (x2_450-08)
LGE Optimus EX (x2)
Acer Iconia One 7 (vespa2)
Samsung Galaxy Note Pro 12.2 (v1awifikx)
Samsung Galaxy Note4 (tre3calteskt)
Samsung Galaxy Note Edge (tbeltektt)
Samsung Galaxy Note2 (t0lte)
LGE Optimus 2X (star_450-05)
LGE LG-P990hN (star)
Pantech Izar (sp33k)
Samsung Galaxy S4 Mini  (serranolte)
KT Tech KM-S220H (s220H)
Enspert S732 (rk3026)
Samsung Galaxy Note 10.1 (p4notewifiww)
Samsung Galaxy Note 10.1 (p4notelteskt)
Barnes and Noble NOOK짰 HD+ (ovation)
Samsung Samsung Galaxy S4 Zoom (mprojectltektt)
Samsung Galaxy Tab Pro 8.4 (mondrianwifikx)
Acer A1-811 (mango)
Samsung Galaxy Tab3 7.0  (lt023g)
Samsung Galaxy Tab3 (lt01wifikx)
Samsung Galaxy Tab3 8.0 (lt01wifi)
Samsung Galaxy S4 (ks01lte)
Samsung Galaxy Note 8.0 (konawifi)
Samsung Galaxy S5 (kltevzw)
iRIver Wow(Window of the world) (itq700)
Samsung Galaxy Note3 (hltetmo)
Samsung Galaxy Note3 (hlte)
Samsung Galaxy Player 5.8 (harrison)
g02_d7ref
Samsung Galaxy Round (flteskt)
fiber-inets
Pantech IM-A920S (ef65s)
Pantech IM-A775C (ef34c)
Pantech IM-A730S (ef30s)
Pantech Mirach (ef13l)
LGE G Pad 7.0 (e7wifi)
Acer A1-830 (ducati)
Xiaomi HM NOTE 1LTETD (dior)
Samsung Galaxy S3 (d2can)
LGE Optimus 3D (cosmo_450-05)
Samsung Galaxy Grand (baffinvektt)
HTC Desire HD (ace)
Samsung Galaxy A7 (a7ltektt)
Vandroid
Samsung SHW-M340K (SHW-M340K)
Samsung Galaxy Tab 8.9 (SHV-E140K)
Lenovo Mobile S5000 (S5000)
Gigabyte i7 (RCT6773W22)
GT-P7510
Samsung Galaxy Tab 8.9 (GT-P7300)
Acer A3-A10 (zara)
LGE LG G Flex2 (z2)
x86
LGE Optimus 4X HD (x3)
LGE 070 touch (w3voip)
LGE Optimus Vu (vu10)
Samsung Galaxy Note Pro 12.2 (viennaltekx)
vfpv
LGE Wine Smart (vfp)
Acer Icona One 7 (vespa)
u35gt
LGE LG Optimus L9 (u2)
Sony Xperia Tablet S (txs03)
Samsung Galaxy Note4 (trltetmo)
Samsung Galaxy Note4 (trelte)
Samsung Galaxy Note4 (tre3caltektt)
Toshiba Corporation AT400 (tostab12AL)
Toshiba Corporation AT100 (tostab03)
LGE LG Optimus One (thunderg)
LGE Optimus One (thunder_kor-08)
LGE Optimus One (thunder_kor-05)
NVidia TegraNote (tegranote)
HTC HTC One max (t6ul)
Samsung Galaxy Note2 (t0ltetmo)
Motorola XOOM (stingray)
Samsung Galaxy Tab3 10.1 (santos10wifi)
HTC HTC Sensation XL with Beats Audio X315e (runnymede)
Hisense F5281CH (rk3288)
Hisense Sero 8 (rk3188)
rk29sdk
HP Slate 21 Pro (ranger)
qishang77_cu_ics2
Acer Picasso (picasso)
p4wifi
Pantech Flex (oscar)
nuclear-pfdq88c
nuclear-evb
nuclear-86V
Sony Tablet S (nbx03)
Fuhu nabi 2 Tablet (mt799)
Samsung Galaxy Grand2 (ms013g)
iRIver MM3202 (mm3201)
Samsung Galaxy Tab4 8.0 (milletwifiue)
Samsung Galaxy Tab4 8.0 (milletltektt)
Samsung Galaxy Tab4 8.0 (milletlte)
Asus MeMO PAD (me172v)
mc706
Samsung Galaxy Tab4 10.1 (matissewifi)
HTC HTC One (m7)
Samsung Galaxy Note 10.1 (lt03ltektt)
Samsung Galaxy Tab3 7.0    (lt02lteatt)
Samsung Galaxy Tab3 Kids (lt02kidswifi)
Samsung Galaxy Trend Lite (kylevess)
Samsung Galaxy TabS 8.4 (klimtwifikx)
Samsung Galaxy S4 (jfltevzw)
Samsung Galaxy S4 (jfltecan)
iRIver Wow TAB + (itq701)
Huawei Huawei-U8665 (hwu8665)
Huawei HUAWEI MediaPad 10 Link+ (hws10231l)
Huawei MediaPad 10 LINK (hws10201u)
Archos Hudl HT7S3 (ht7s3)
Samsung Galaxy Note3 (hltevzw)
Samsung Galaxy Note3 Neo (hl3g)
Samsung Galaxy S3 Mini (golden)
Samsung Galaxy Camera  (gd1ltelgt)
Samsung Galaxy Grand Prime (fortunalte)
Google Nexus 9 (flounder)
fiber-mpgio
Motorola Moto G (falcon_umts)
f16ref
HTC HTC_P515E (expresskt)
ZTE ZTE N9120 (elden)
ef32k
LGE G pad 8.0 LTE (e8lte)
LGE My touch 4G (e739)
Enspert enspert_e201 (e201)
dtc_gt18
Samsung Galaxy Tab4 7.0 (degaswifiue)
Samsung Galaxy S3 (d2usc)
Samsung Galaxy S3 (d2ltetmo)
Samsung Galaxy S3 (d2att)
crane-sochip-sc3077
crane-eduplayer-sc3057
crane-amos7
Samsung Galaxy Pocket Neo (corsica)
Samsung Galaxy Tab S 10.5 (chagallwifi)
Motorola Droid X (cdma_shadow)
Fujitsu ARROWS X LTE F-05D (blaze)
Samsung Galaxy Grand Neo (baffinlite)
Samsung Galaxy Grand duos (baffin)
ZTE Z992 (aviva)
Samsung Galaxy Core (arubaslim)
Samsung SGH-S730G (amazingtrf)
Samsung Galaxy Centura (amazing3gtrf)
Acer Liquid E700 (acer_e39)
Samsung Galaxy A7 (a7ltelgt)
Z25
TCT Mobile Limited (Alcatel) ONE TOUCH 4033X (Yaris_M_GSM)
Lenovo Mobile Lenovo YOGA Tablet Pro-1050L/Yoga Tablet 2 (YT2)
Samsung Galaxy Player 4.2 (YP-GI1)
TCT Mobile Limited (Alcatel) Vodafone Smart mini (Vodafone_875)
Virtual
Pegatron Android Tablet PC (TabletPC)
Asus ASUS Transformer Pad TF300TG (TF300TG)
Gigabyte NS-15AT10 (TA120)
Sony Ericsson Xperia ray (ST18i)
Samsung Galaxy S2 Epic (SPH-D710)
Sony Xperia Z2 Tablet (SOT21)
Samsung SHW-M460D (SHW-M460D)
Sony Ericsson Xperia Tablet Z (SGP312)
Samsung Galaxy S2 (SGH-I777)
Samsung Galaxy Note3 (SC-02F)
Samsung Galaxy Note2 (SC-02E)
Fujitsu ARROWS A SoftBank 301F (SBM301F)
Lenovo Mobile IdeaTab S6000 (S6000)
Wind River Ellipsis 7 (QMV7A) (QMV7A)
TCT Mobile Limited (Alcatel) ALCATEL ONE TOUCH P310A (POP7)
Sony Ericsson Xperia sola (MT27i)
Asus ASUS Fonepad ME371MG (ME371MG)
Asus ME173X (ME173X)
Digi-In Monster M10 (M10)
Sony Ericsson Xperia SL (LT26ii)
Kyocera Corporation URBANO L02 (KYY22)
Kyocera Corporation DIGNO S (KYL21)
Asus MeMO Pad ME103K (K01E_2)
Asus MeMO pad 8 ME581CL (K015)
Asus MeMO Pad 7 (K013_1)
Asus MeMO Pad 8 (K011_1)
Samsung Galaxy Y (GT-S5360T)
Samsung Galaxy Pocket (GT-S5300)
Samsung Galaxy Tab 7.7 (GT-P6800)
Samsung Galaxy Tab 7.0 Plus (GT-P6200)
Samsung Galaxy Tab (GT-P1000L)
Samsung Galaxy Tab (GT-P1000)
Samsung Galaxy Beam (GT-I8530)
Enjoy 71
Digi-In EGQ337 (EGQ337)
Pantech VEGA Secret UP (EF62L)
Hisense NBX-T7014 (E270BSA)
DragonTouch-Y88X
Sony Xperia Z3 Compact (D5833)
Sony Xperia C3 (D2533)
Sony Ericsson Xperia Z (C6602)
Kyocera Corporation Hydro (C5170)
Sony Ericsson Xperia M (C1904)
Acer B1-710 (B1-710)
AN101G4