Introduction to Android In-App Billing API – The Zen of Monetization #6

Android 앱으로 돈을 벌고 싶습니까? 그러나 일은 복잡합니다 신용 카드와 결제 시스템을 갖춘 [비 일치], 맞습니까? 안녕

나는 네토 마린이고, 네가 이해하도록 돕기 위해 왔어 앱에서 인앱 결제를 사용하고 작성하는 방법, 당신이 돈을 벌기가 더 쉬워 지도록 앱에서 수익을 창출하는 데는 여러 가지 방법이 있습니다 AdMob으로 광고를 게재 할 수 있으며, Freemium 버전에서 업그레이드 제공 프리미엄 기능에 대해 지불하거나 가상 제품을 판매하십시오 또한 앱 또는 서비스에 구독 모델을 사용할 수 있습니다

그리고 이러한 방법 중 일부는 인앱 결제를 사용하여 돈을 수령 할 수 있습니다 인앱 결제는 호스팅되는 서비스입니다 추가 콘텐츠 요금을 청구 할 수있는 Google Play 앱에서 업그레이드 할 수 있습니다 인앱 결제를 앱과 통합 할 때, API를 사용하여 Google에서 제품 세부 정보를 요청할 수 있습니다 인앱 상품에 대한 주문, 배송 정보를 신속하게 검색 할 수 있습니다

사용자의 구매 내역을 기반으로 사용자의 경우 Google Play에서 수표를 제공합니다 사용자가 인앱과 상호 작용하도록하는 외부 인터페이스 직관적이고 원활한 결제 서비스 인앱 결제 API에는 몇 가지 규칙 및 모범 사례 인앱 결제를 사용하는 경우에만 디지털 제품을 판매 할 수 있습니다 예를 들어, 우리는 제품을 말하고 있습니다

동전, 추가 생명, 특별 물품, 또는 추가 수준 광고 기능이없는 버전, 또는 무료 버전에서 사용할 수없는 기능 스트리밍 미디어, [INAUDIBLE] 동영상 또는 기타 미디어 서비스 그러나 다른 제품도 있습니다 인앱 결제에서는 허용되지 않습니다

소매 식료품, 식료품, 의류, 가정 용품 및 전자 제품 세금 및 운송 서비스를 포함한 서비스 수수료, 청소, 음식 배달 및 기타 일회성 회비 또는 회비, 체육관 회원권, [INAUDIBLE], 또는 다른 회계 제품 피어를 포함한 일회성 지불 피어 지불, 온라인 경매 및 기부 또는 전자 청구서 지불 (신용 카드 청구서 포함) [INAUDIBLE] 및 케이블 또는 텔레 커뮤니케이션 서비스 이 정책에 대한 자세한 내용은 우리의 지원 페이지를 확인하십시오

인앱 결제를 구현하는 첫 단계 Google Play 개발자를 사용하여 제품을 정의하는 것입니다 제품 유형, SKU, 가격 등을 포함한 콘솔 버전 3 API는 관리되는 인앱 제품을 지원합니다 및 구독 각 유형에 대한 자세한 내용을 살펴 보겠습니다

관리되는 인앱 상품은 항목입니다 Google Play에서 추적하고 관리합니다 Google Play에서 구매 항목을 저장한다는 의미입니다 각 항목에 대한 정보 이 정보는 모든 Google Play 서비스, 사용자가 애플리케이션을 제거하더라도, 또는 장치를 변경하는 경우 또한 버전 3 API를 사용하면 관리되는 항목, 그들은 여러 번 구입할 수 있습니다

이것은 게임을 구현할 때 유용합니다 예를 들어, 사용자가 통화, 음식, 마법의 물약, [INAUDIBLE] 이 인앱을 프로비저닝해야합니다 제품을 사용자에게 제공합니다 한 번만 구매할 수있는 인앱 제품의 경우, 소비를 구현할 필요가 없습니다 구매 후, 이들 항목 사용자 Google 계정에 영구적으로 연결됩니다

프리미엄 업그레이드 또는 레벨 팩처럼 인앱 결제를 위해 제공되는 다른 유형의 제품 가입입니다 구독을 통해 콘텐츠, 서비스 또는 기능을 판매 할 수 있습니다 자동화 된 결제로 반복되는 일정에 따라 사용자가 앱에서 구독을 구매할 때, Google Play는 모든 체크 아웃 세부 정보를 처리하며, 따라서 어떤 금융 거래도 처리 할 필요가 없습니다 반복 청구, 당신이 선택한 간격으로

매주, 매월, 3 개월, 6 개월, 매년, 그리고 계절 무료 평가판 기간을 설정할 수도 있습니다 사용자가 구독을 시도 할 수있게 해줍니다 콘텐츠를 구매하기 전에 Google Play는 모든 구독 유형에 대한 무료 평가판을 지원합니다 계절 구독을 포함하여 프로모션은 새로운 사용자를 유치하기위한 좋은 방법이며, 잠시 떨어져있을 수도있는 사용자와 소통 할 수 있습니다

버전 3에서는 인앱 결제를 사용할 수 있습니다 제품의 프로모션 코드를 만들고 관리 할 수 ​​있습니다 보시다시피 인앱 결제는 많은 이점을 제공합니다 귀하와 귀하의 사용자를 위해 다음 비디오에서는 우리가 손을 볼 것입니다 Google Play에서 제품을 정의하는 방법을 알려 드리겠습니다

개발자 콘솔을 사용하고 구매 흐름을 구현하십시오 만약 당신이 스스로 탐험을 시작하고 싶다면, 인앱 결제에 대한 설명서 및 가이드를 확인하십시오 API 시청 해 주셔서 감사 드리며 다음 동영상에서 만나실 수 있습니다 안녕

Android Jetpack: sweetening Kotlin development with Android KTX (Google I/O ’18)

[음악 재생] JAKE WHARTON : 안녕하세요 제이크는 제이크입니다

코틀 린 물건에 대한 안드로이드 팀에서 일하고 있습니다 오늘은 Android KTX에 대해 이야기 할 것입니다 그리고 난 그냥 가지 않을거야 거기에있는 물건들을 묶어서 나는 그것보다 조금 더 재미있게 만들고 싶다 그래서 나는 약간의 일부터 시작하려고합니다

작년에 Google I / O에서 작년에 여기 있었는데 Android 유형에 대한 확장 기능을 작성할 수 있습니다 이 예와 같이 ViewGroup 내부의 뷰를 반복하는 코드 이 일반 코드를 확장 프로그램으로 가져올 수 있습니다 그리고이 확장이하는 일은 타입을 향상시키는 것입니다 우리가 통제하지 않는 ViewGroup 유형

기본적으로 멤버 함수를 만들 수 있습니다 그건 실제로 멤버 함수가 아닙니다 실제로 바이트 코드에서 정적 함수로 변합니다 우리가 향상시키고 자하는 기능으로 그래서 우리는 원래 코드를 취할 수 있습니다 명시적인 for-loop가 있었고이 새 멤버를 사용합니다

우리가 의도 한 것의보다 간결한 버전을 만들 수 있습니다 실제로 시각적으로 구분됩니다 일반 멤버 함수에서 이탤릭체로 표시됩니다 어두운 황색을 사용하면 실제로 노란색이됩니다 그러나 이것은 회원에게 전화하는 것과 의미 상으로 동일합니다

또는 의의는 의미 상 동등한 느낌을주기위한 것입니다 그리고 자주 시작됩니다 확장 기능에 대해 이야기하고, 당신이 생각하기에, 음, 이것이 아주 유용하다면, 왜 우리는 D 그룹에 직접 기능을 넣지 않습니까? ViewGroup은 왜 for-each와 for-each 인덱스를 제공하지 않는가? 람다를 필요로합니까? 그리고 정말로, 그 이유는 람다 때문입니다 우리가 Java 8이나 Kotlin에서 lambda를 넘길 때, 기본적으로, 그 방법을 먹는 익명의 클래스를 만들어야합니다 클래스 로딩을 유발합니다

그러나 Kotlin은 언어 기능, 우리는 그 람다의 할당을 제거 할 수 있습니다 함수를 인라인으로 표시함으로써, 확장의 본문이 호출 사이트로 복사되고, 우리는 제로 오버 헤드 추상화가 있습니다 다른 예를 살펴 보겠습니다 API 23에서 우리는 시스템 서비스를 얻을 수있었습니다 클래스 유형에 따라 그리고 27

1 개의 지원 도서관에서, ContextCompat 버전은 모든 API 수준에서 작동하도록 추가되었습니다 이것을 인라인 인 확장 프로그램으로 가져올 수도 있습니다 이전과 같지만 람다를 포함하지 않습니다 이게 다른 점은 무엇입니까? reified라고하는 것입니다 자, 이것은 컴파일러 트릭입니다

그 트릭이하는 일은 타입 정보 컴파일 타임에 알려진 일반의, 런타임에 사용 가능하도록 만들 수 있습니다 그래서 이것이 우리가 할 수있는 것입니다 그렇지 않으면 우리는 classjava를 호출 할 것입니다 알림 관리자에서 이제 그 정보를 추상화 할 수 있습니다

이 연장 뒤에 그래서 우리의 호출 코드가 이제는 단순화되었습니다 제네릭을 통과 할 수 있어야합니다 그리고 그것이 구체화 되었기 때문에, 그것의 구현은 classjava를 호출 할 수있는 액세스 권한이 있습니다

따라서 뷰의 패딩을 업데이트하려면 우리는 4 가지 중 2 가지만 지정합니다 매개 변수 -이 경우에는 왼쪽과 오른쪽 모두를 업데이트합니다 우리는 기존 패딩을 꺼내야합니다 안드로이드가 필요하기 때문에 상단과 하단에 대한 당신은 네 가지 모두를 지정해야합니다 이것은 우리가 다시 치료할 수있는 것입니다

확장 기능을 사용합니다 여기서 핵심은 각 인수에 대해 우리가 정의한이 새로운 기능에 대해, 우리는 기본값을 지정하고 있습니다 그리고 그 기본값 해당 인수에 값이 제공되지 않을 때 사용됩니다 그래서 우리는 호출하는 코드를 우리는 4 개 모두를 지정하고 있으며, 이제는 2 개로 지정합니다 하지만 여기서 문제는 우리가 제거한 것입니다

두 가지 주장 그러나 우리는 두 가지를 공급하기 때문에, 코 틀린 (Kotlin)은 이것을 처음 두 가지 의미로 생각합니다 후자의 두 개는 기본값이 사용되는 곳입니다 이것은 우리가 의도 한 바가 아닙니다 우리는 왼쪽과 오른쪽, 그것은 첫 번째와 세 번째입니다

또 다른 언어 기능이 여기에 도움이되는데, 이름이 매개 변수입니다 매개 변수의 이름을 지정함으로써, 우리는 컴파일러에게 두 개의 인수 중 어떤 것을 말할 수 있습니다 우리가 지정하고 그것을 채울 수 있도록 다른 사람의 기본값은 승인 Android API에는 여러 가지 복합 유형이 있습니다 이들은 점, 직사각형, 쌍과 같은 것들입니다

심지어 위치 클래스 이러한 복합 유형은 단지 래퍼 일뿐입니다 작은 개별 데이터 조각 주위 이 경우 사각형이있는 API를 호출합니다 그것은 네 개의 주위를 둘러싼 합성물입니다 – 왼쪽, 위쪽, 오른쪽, 그리고 바닥 – 직사각형의 값

계산을해야하는 경우 이러한 복합 형의 내부의 값에 근거 해, 당신은 그것들을 개별적인 값들 또는 변수들로 끌어 내야 만합니다 그 계산을하기 위해서 그리고 잠재적으로, 그들을 다시 모으십시오 확장의 도움으로이 문제를 피할 수 있습니다 이것은 약간 다릅니다 연산자라는 새로운 키워드가 있습니다

운영자는 Kotlin이 특별한 호출 사이트 구문을 사용할 수있게 해줍니다 그리고 각 연산자 함수는 매우 구체적인 이름을 가지고 있습니다 잘 알려진 이름 당신은 어떤 이름도 만들 수 없습니다 그리고 그 이름은 당신이 어떤 콜 사이트 구문을 정의하는지 창조하려고합니다

이 경우 구성 요소라고합니다 그리고 구성 요소를 사용하면 기능을 사용할 수 있습니다 Kotlin의 파괴라고합니다 그래서 개별적으로 철수해야했던 우리의 원래 코드 네 가지 구성 요소가 이제이 호출 ​​사이트를 사용할 수 있습니다 사각형이 자동으로 작성된 구문 4 개의 값에 압축을 풀고 4 개의 변수에 할당 우리가 선택한 이름으로 이것에 대해 정말 멋진 점은, 나중에 그 사람에 대해 신경 쓰지 않는다면 그 사람을 생략 할 수 있습니다

그리고 당신이 중간에있는 사람들에 관심이 없다면, 그것들을 밑줄로 지정할 수 있습니다 그리고 만약 우리가 단지 두개의 값을 꺼낼 필요가 있다면, 우리는 그것을 매우 간결하게 할 수 있습니다 승인 숙련 된 Kotlin 사용자가 알 수도 있습니다 그게

음, 우린 뒤집혔을거야 슬라이드로 돌아갈 수 있을까요? 승인 이 코드는 어떻게 우리는 문자열에는 숫자 만 포함됩니다 기본적으로 문자를 반복합니다

Kotlin의 for-in 구문을 사용합니다 그것이 자인지 여부를 확인합니다 문자에 대한 확장 함수 사용; 값을 true 또는 false로 설정합니다 그것이 자릿수가 아닌 것을 발견 할 때마다 숙련 된 Kotlin 사용자 인 경우, 당신은 모든 기능에 대해 알고있을 것입니다

string 상에 존재하는데, 그것은 동일한 루핑을 캡슐화한다 술어를 지정할 수있게 해줍니다이 경우, 입니다 실제로는 인라인 함수입니다 그래서 우리가 가지고있는 것과 똑같은 일을 할 수 있습니다

이전 슬라이드에 썼다 그러나 흥미로운 점은 Android는 실제로 이것을위한 내장 함수 그리고 나는 많은 사람들이 실제로 이것이 존재한다는 것을 알지 못한다 그리고 이것은 우리가 실제로 취할 수있는 것입니다 확장으로

그러나 당신은 궁금해하기 시작합니다 연장에있는 그것의 무게? 이 정적 메서드를 사용하면 어떤 가치를 얻을 수 있습니까? 내선 번호로 전화 할 수 있습니까? 글쎄, 하나, 그것은 방법을 변경 우리가 더 자연스럽고 관용적 인 느낌을 갖기 위해 코 틀린에서 – 확실한 그러나 여전히, 우리가 이것에서 추출한 가치가 있습니까? 우리가 이걸로 얻은 것 중 가장 큰 것 IDE에있을 때 문자열이 있습니다 당신은이 질문을하기를 원한다 그것은 숫자 만 포함합니다

TextUtils의 정적 메서드가 있다는 것을 모르는 경우, 당신은 아마 그것을 결코 발견하지 못할 것입니다 확장 기능을 사용할 때 IDE에서 타이핑을 시작하면, 실제로이 확장 기능과 자동 완성 기능을 보여줍니다 다른 곳보다 훨씬 더 쉽게 발견 할 수 있습니다 Enter 키를 누릅니다 그리고 당신은 그것을 얻습니다

괜찮아 그래서 여기에 몇 가지 확장 기능을 설명했습니다 나는 너에게 조금 생각 나게하고 싶었다 이러한 확장의 힘, 사실 우리는 오직 존재하는 언어 기능을 활용하고 있습니다 Kotlin에서는 Java 언어가 아닙니다

실제로,이 예제 중 일부는 우리는 나머지 동안 계속 돌아갈 것입니다 이 이야기 그래서 내가 방금 보았던 모든 확장 기능들 Android KTX 라이브러리에 포함되어있다 2 월 초 발표했습니다 그 이후로 두 번의 발표가있었습니다

화요일 현재, 그것은 제트 팩 (Jetpack)의 일부입니다 Jetpack으로 버전이 지정됩니다 그래서 화요일에 Core-KTX는 10 알파 1이되었습니다 버전이 만들어지고 출시 될 예정입니다

미래의 젯팩 (Jetpack) 도서관이있다 그래서 우리는이 Core-KTX를 출시 할 때 호출했습니다 그것은 이상한 이름의 종류이었다 그것은 말이되지 않았습니다 이것은 프레임 워크에서만 유형의 확장을위한 것입니다

많은 사람들이 도서관 자료를 추가 할 수 있을지 제안했습니다 그리고 우리는 no라고 말하는 것에 대해 매우 단호했습니다 바라건대 지금은 훨씬 더 의미가 있어야합니다 그러나 이것조차도 사실이 아닙니다 Core-KTX가 처음에는 support-compat에 의존했기 때문입니다

Support-compat은 이전 버전과의 호환성을 제공합니다 Android 프레임 워크에있는 것들의 버전 이전에는 ContextCompat로 예제를 보여 줬습니다 이것은 support-compat에서 나온 것입니다 그리고 지금, 제트 팩 브랜드와 안드로이드 X 패키지, support-compat이 핵심이되었습니다

이제 Core-KTX는 Core와 함께합니다 그래서 우리는 우리가 무엇을하고 있는지 알았습니다 우리가 이것을 시작했을 때 그리고 지금, 그것은 단지 갚기 시작했습니다 다른 Jetpack 라이브러리와 함께, 실제로 몇 가지 새로운 KTX 라이브러리가 있습니다

그것으로 시작됩니다 그래서 우리는 fragment, collection, SQLite를 가지고 있습니다 최신 구성 요소, 탐색 및 작업 런타임 용 나중에 조금씩 발견 할 수있는 방법을 알려 드리겠습니다 하지만 범위 지정에 대해 조금 이야기하고 싶습니다

무엇을해야할지 여부를 결정하는 방법에 대해 이 라이브러리들 중 하나에 들어가십시오 괜찮아 그래서 Core-KTX 03에서는 확장 기능을 제공했습니다 그게 그렇게 보였어

서명을 보면 연산자입니다 그리고 그것은 색상으로 작동합니다 이름은 플러스입니다 그래서 이것은 우리가 정상적인 더하기 구문을 사용하여 추가, 함께 두 가지 색상 합성 서명은 확실히 확장입니다

하지만이 몸은 매우 다른 것처럼 보입니다 우리가 본 다른 확장보다 상당한 양의 코드가 여기에 있습니다 당신이 안으로 볼 경우, support-compat, 현재 코어입니다 컬러 유틸리티 클래스가 있습니다 그리고 그 컬러 유틸리티 클래스는 정수 색상에서 작동하는 합성 색상이라고하는 메소드입니다

전경과 배경을 가져갈 수 있습니다 그것들을 하나의 색깔로 바꾸십시오 구현을 배치하기에 적합한 후보입니다 그 확장 기능이 무엇인지 이 클래스에 모든 사람이 사용할 수 있도록 자바 언어에서 사용할 수 있습니다 또는 Kotlin 언어

그래서 Core-KTX 10에서는 실제로 해당 ColorUtils에 위임하기 위해 다시 작성되었습니다 따라서 Java 언어 사용자는 해당 기능을 사용합니다 그러나 Kotlin 사용자는 향상된 구문을 사용합니다 그리고 우리가 얘기 한 확장 기능을 살펴 본다면 지금까지, 그들의 몸, 구현 이 함수들 중, 그들은 모두 사소한 것입니다

그들은 대단히 사소하다 그리고 그것은 의도적으로 설계된 것입니다 그리고 이것은 나를 몇 가지 원리를 다루도록합니다 우리는 KTX 확장이 가져야한다고 정의했습니다 따라서이 첫 번째 기능은 기능을 적용하려는 것입니다

그것은 이미 존재합니다 새로운 기능을 추가하려면 그것들은 업스트림으로 리디렉션되어야합니다 그들은 언어 불가지론 자입니다 두 언어 모두 그들을 이용하십시오 이것의 다른 예 – 몇 가지 HTML compat stuff와 path iterator가있었습니다

이후 Core-KTX에서 처음으로 구현 된 코어로 업스트림으로 이동 가능 두 언어로 사용됩니다 이러한 모든 확장에 공통적 인 또 다른 사항 인라인으로 표시되어 있다는 것입니다 우리가 첫 번째 행을 인라인하는 이유는 맨 위에있는 것 – 람다 할당을 피하기 위해서입니다 두 번째의 경우, 우리가 수정 된 제네릭을 사용하고 있기 때문에, 우리는 실제로 컴파일러에 의해 인라인을 사용해야합니다 세 번째, 구성 요소 1, 맨 아래 1 모두 인라인입니다

네가 쓰지 않는 것에 대한 앨리어스 만 확장 기능이없는 경우 우리가 뭔가를 본다면 Core-KTX에는 인라인이 아닙니다이 반복자 확장자가 있습니다 우리가 Kotlin 's for / in을 사용할 수있게 해주는 ViewGroup에 뷰와 ViewGroup을 반복하는 구문 이것은 매우 구체적인 이유로 인라인되지 않습니다

그리고 그것은이 함수의 구현이 익명 클래스를 정의합니다 만약 우리가 이것을 인라인했다면, 당신이 그것을 사용하면 익명의 클래스가 호출 사이트에 정의됩니다 그래서 갑판의 크기, 방법 수, 및 클래스 로딩 우리는 명시 적으로이를 인라인으로 만들지 않습니다 우리는 단일 구현을 모든 발신자가 다시 사용할 수 있습니다

그래서 우리는 인라인이 아닌 확장 기능을 기본값으로 사용합니다 할당 이유 그리고 나는 이것이 정말로 KTX 스타일 확장 만 가능합니다 일반적인 Kotlin 코드에서 이것은 권장하지 않습니다 인라인 기본 설정을 원하지 않습니다

실제로 가지고있는 잠재력이 있기 때문에 긍정적 인 것보다는 당신의 코드에 부정적인 영향 괜찮아 그래서 우리가이 확장을 보여 주었을 때, 나는 인라인 수식어가 사실과 결합 된 방법에 대해 이야기했다 람다가 있다는 것,이 확장을 허용합니다 제로 오버 헤드 추상화

검증 된 경우, 우리는 능력을 얻습니다 더 많은 선언적 버전을 가짐 지정하지 않고도 호출 사이트에서 조회를 수행 할 수 있습니다 콜론 콜론 classjava 패딩을 업데이트하기 위해 기본값을 사용합니다

각 인수를 지정할 필요가 없기 때문에, 인수의 하위 집합을 지정하는 이름 매개 변수 우리는 실제로 제공하고자합니다 구조 조정의 경우에는 멋진 구문을 사용합니다 이를 통해 우리는 컴포넌트 변수를 분리 할 수 ​​있습니다 합성 오브젝트의 이것은 유용합니다 이것은 우리가 가지고있는 사실에 의해 가능합니다

Kotlin에서 연산자 오버로딩 우리는 또한 우리가 어떻게 더하기 색상을 추가 할 수 있었는지에 대해서도 이야기했습니다 이 경우 정적 메서드 확장의 별칭을 지정합니다 이는 발견 가능성을 높이는 데 도움이됩니다 당신이 그렇지 않으면 몰랐을 내장 헬퍼가 존재합니다

그리고 컬렉션과 유사하지만 그렇지 않은 유형의 경우 실제로 컬렉션, 우리는 능력을 가지고 그들을 가상 컬렉션으로 변환 우리는 언어의 용역을 사용할 수 있습니다 마치 실제 컬렉션 인 것처럼 그래서 이들 각각은 매우 Kotlin 특정 언어를 가지고 있습니다 사용하는 기능 그리고 우리는 이러한 모든 확장 기능이 Kotlin 언어의 일부 기능을 활용하도록 정의 자바 호출자에게는 그렇지 않다

우리는 API를 수정하는 것만으로도 확장 기능을 제공하지만 확장 기능을 제공합니다 레버리지를 사용하여 사용하는 것이 더 즐겁다 이러한 Kotlin 관련 기능 승인 우리가 자주 얻는 제안 중 하나 setOnClickListener와 같은 것을 가져 오는 것입니다

확장을 작성하면 Click 또는 OnClick과 같은 것을 사용하여 호출 할 수 있습니다 이것은 호출 코드를 허용합니다 setOnClickListener를 호출 할 필요없이, 클릭의 단축 버전을 얻습니다 이 언어의 기능을 활용하고 있습니까? 글쎄, 우리는 확장 함수를 사용하고 있지만 실제로는 그렇지 않습니다 우리는 단지 짧은 별명을 만들고 있습니다

이 확장 프로그램에서 얻을 수있는 가치는 무엇입니까? 글쎄, 우리는 몇 가지 적은 문자를 입력하고 있습니다 그러나 실제로, 그것은 어쨌든 자동 완성됩니다 그러나 더 나쁜 것은, 우리가 여기서 선례를 세울 것인가 이 확장 기능을 추가하여? 모든 청취자에게이 작업을 수행 할 예정입니까? 그래서 이것이 뭔가 좋은 예입니다 우리는 명시 적으로 KTX 라이브러리에서하고 싶지 않습니다 당신이 그 용어에 익숙하지 않다면, 우리는이 코드를 골프라고 부릅니다

가능한 한 최단의 코드를 만들려는 욕구를 가지십시오 이것은 우리가하고 싶지 않은 것이다 코드를 더 짧게 만들려고 여기에 온 것은 아닙니다 승인 지금은 또 하나의 제안이 있습니다

그리고 나는 사람들이 사용하는 것을 보았다 Android의 경우 다양한 API 레벨로 인해 우리는 아주 자주 당신을 지원해야합니다 SDK int 주변의 IF 검사를 참조하십시오 그래서 이것을 꺼내는 유혹을받을 수 있습니다 확장 기능으로 이것의 조금 더 많은 선언적 버전

비교를 확장 함수로 옮깁니다 인라인 함수이기 때문에 오버 헤드가 없습니다 람다는 마지막 매개 변수입니다 그래서 우리는 멋진 Kotlin 호출을 얻습니다 사이트 구문

그리고 이것은 우리의 IF 진술을 이것으로 변환합니다 자, 이것 자체만으로는 너무 끔찍하지 않습니다 우리는 실제로 어떤 언어 기능도 활용하지 않습니다 다시 말하지만, 마지막 것과 비슷하지만 여전히 별명입니다 하지만 최소한이 점은 조금 더 논쟁 할 수 있습니다

그것의 공로 때문에 그러나 문제가 있습니다 이 두 문장은 동일하지만, 오, 한가지는 최소한 정적 SDK SDK int, 그리고 나서 그들은 조금 더 가깝습니다 이것이 이것이 덜 타당한 이유 중 하나입니다 하지만 한 가지는 IF 문 프로그래밍 언어의 아주 원시적 인 구조입니다

IF 문은 IF 문이 아니기 때문에, ELSE와 같은 구조가 있습니다 요구 사항이 변경되면 어떻게 될까요? 이 두 가지 행동을 바꿔야한다고 다른 버전? 당신이 작성한이 확장 프로그램을 사용했다면, 이 사건을지지하기 위해 IF 문을 사용하여 다시 변경해야합니다 또는 함수를 수정해야하는 경우, 어쩌면 지금은 두 개의 람다가 필요합니다 한 명은 19 세 이상이고 한 명은 사건입니다 네가 아니야 이 함수에서는 두 개의 람다를 사용하지 않기 때문에, 우리는 특별한 후행 람다 구문을 잃어 버렸습니다

이제 우리는 내부적으로 인수로 전달해야합니다 괄호는 이전에 비해 우리는 그렇지 않았습니다 즉각적으로이 확장은 붕괴되기 시작합니다 다른 조건부 분기를 도입하면 어쩌면 API 전반에서 동작을 다르게해야 할 수도 있습니다 세 가지 다른 방법으로 – 글쎄, 우리가 확장 프로그램이이를 가능하게 할 수 있습니다

이 확장에 대해 다른 점은 IF 문과 비교하면 우리가 가정하고있는 것입니다 확인하고 싶은 조건부 보다 크거나 같음 우리가 람다에서 뛰고 싶은 행동, 우리는 단지 19 플러스에서 뛰고 싶습니다 글쎄, 많은 시간, IF 문 중 일부는 – 다시, SDK int -는 작거나 같을 것입니다 그리고 이제는 순서대로 두 번째 확장이 필요합니다 사용 사례를 지원합니다

그래서 이것은 뭔가의 또 다른 예입니다 우리가하려는 게 아니야 우리는 단 한 번의 사용으로 최적화하고 싶지 않습니다 사례 또는 특정 유스 케이스, 확장 만 한 가지 일을 지원합니다 그리고 나서 좀 더 복잡한 것으로 옮겨야 할 때, 당신은 원래의 행동으로 되돌려 야합니다

확장 프로그램을 통해 당신이 필요로하는 모든 것을 표현하기 그것이 존재하지 않는다면 표현할 수 있습니다 승인 지금까지 우리가 얘기해온 모든 확장 기능 Core-KTX 라이브러리에있는 것들이었습니다 나는 많은 연장을 겪고 싶지 않다 이 다른 도서관에 있습니다

다시 한 번 조금씩 발견 할 수있는 방법을 보여 드리겠습니다 하지만 나는 하나를 만지고 싶다 그래서 KTX 단편에는 확장이 있습니다 트랜잭션을 캡슐화합니다 beginTransaction과 commit 함수를 이동합니다

확장 기능으로 호출합니다 우리는 인라인 함수를 사용할 수 있다는 사실을 사용합니다 및 람다를 다시 0 오버 헤드로 변환합니다 맡은 일 우리의 호출 코드는 조금 더 짧아지고, 이제 우리는 람다 본문과 트랜잭션을 사용합니다

조각을 사용했다면 커밋이 유일한 커밋 기능이 아니라는 것을 알아라 실제로는 여러 가지가 있습니다 그래서 우리는 뭔가를함으로써 이것을 모델링 할 수 있습니다 같은 부울을 제공 할 수 있도록 상태 손실을 허용할지 또는 허용하지 않을지 여부 당신이 저지를 때 이것은 수용하기가 정말로 쉽습니다

그러나 그것은 일종의 무언가에 반대한다 나는 이전에 말했어 오, 우리는 이것을 사용할 수 있도록 콜 사이트를 업데이트 할 수 있습니다 내가 앞서 말한 것에 위배된다 구현의 영향을 최소화하는 방법에 대해 이야기했습니다

이러한 확장의 이것은 인라인 함수이기 때문에, 그리고 나서 우리는 이제 인라인 내부에 조건부를 넣습니다 함수, 그 조건부가 인라인되고있다 모든 콜 사이트로 그래서 모든 콜 사이트가 이제 그 내부에 조건부가 있어야합니다 이것은 실제로 나쁜 것입니까? 글쎄, 우리가 바이트 코드를 보면 호출 사이트에서 생성됩니다

우리가 허용 상태 손실을 true로 지정할 때 – 너는 정말로 이해할 필요가 없다 여기에서 무슨 일이 일어나고 있는지 이해하기위한 바이트 코드 기본적으로 세 가지 함수 호출이 있습니다 첫 번째는 beginTransaction입니다 두 번째는 람다 내부에 있던 교체 작업입니다

세 번째 것은 commitAllowingStateLoss에 대한 호출입니다 IF 문은 없습니다 조건부는 없습니다 그리고 이것은 인라인 함수이기 때문에 인수는 부울이므로, 컴파일러는 실제로 컴파일 타임에 가치 그리고 컴파일 시간에 알고 있기 때문에, 그것은 실제로 죽은 코드 제거를 할 수 있습니다

실행될 수없는 분기를 제거하십시오 그리고 실제로 바이트 코드에서, 당신이 그렇지 않으면 쓰려고했던 것과 동등한 것 실제로 커밋 기능이 많이 있습니다 지금 커밋하고 커밋 할 수있는 방법이 있습니다 따라서 우리는 추가 Boolean을 추가하여이를 지원할 수도 있습니다

그리고 똑같은 일이 여기서 일어납니다 이제 그들은 중첩되어 있지만, 데드 코드 제거 단 하나의 기능 만 있도록 결과 바이트 코드를 호출하십시오 승인 이러한 모든 I / O 릴리스의 노력의 일환으로, 우리가 한 일 중 하나 Kotlin 특정 생성을 시작합니다 Android에서 게시하는 라이브러리보기 프레임 워크 자체

그래서 보시다시피 그 파란색 상자에 참조 문서를 방문 할 때, 네가 원한다면 실제로 너에게 물어볼거야 Kotlin 특정 버전의 플랫폼을 보는 방법 또는 Android X 라이브러리 또한 왼쪽 탐색 창에서 아래로 스크롤하면 맨 아래에는 링크도 있습니다 그리고 이것들은 Kotlin의 이러한 라이브러리에 대한 견해입니다 그래서 여러분이 말하길, 조각을 볼 때 패키지를 사용하면 조각에 대한 확장 프로그램을 볼 수 있습니다

문서 안에 있습니다 더 이상 완전히 분리되지 않습니다 한 가지 당장 실종 됐어 우리가 너에게 실제로 말하지 않는다는거야 이것들이 유래 한 인공물의 좌표

곧 올거야 또한 Core-KTX의 확장, 플랫폼 유형을 확장하고 아직 플랫폼 문서에 표시됩니다 그러나 이것은 우리가 원했던 것이다 나가서 일하고 있다는 것을 보여 주려고 그리고 두 가지가 곧 나올 것으로 기대합니다

괜찮아 나는 안드로이드 KTX에 대해 이야기하기 위해왔다 그러나 Kotlin 확장 기능은 없습니다 Android 관련 정보 우리가하고있는 일은 건물 확장입니다

이 도서관을 좀 더 Kotlin에게 친숙하게 만들기 위해 그리고 그것은 모든 도서관이 할 수있는 것입니다 그래서 저는 그 방법들에 대해서 이야기하고 싶습니다 우리는 도서관을 어떻게 더 많이 만들 수 있을지에 대해 생각합니다 Android 라이브러리 모두에 적용되는 Kotlin에 친숙하고, 당신이 쓰고있는 도서관에도 적용됩니다

또는 당신이 사용하고있을 수도 있습니다 도서관을 만드는 첫 번째 방법은 실제로 Kotlin-friendly입니다 Kotlin에서 모든 것을 다시 쓰는 것입니다 분명히 이것은 모든 도서관에서 가능하지 않다 그러나 그것은 확실히 어떤 사람들에게는 선택 사항입니다

앱 전용 비공개 라이브러리 인 경우 귀하의 저장소에 있거나 귀하의 회사 내부에 있습니다 이미 Kotlin을 사용하고 있습니다이 옵션은 실행 가능합니다 그것은, 말하자면 완전히 실용적 인 것처럼 보이지 않습니다 안드로이드 프레임 워크

그리고 나는 우리가 무대에 있다는 것을 확신하지 못한다 안드로이드 X 라이브러리가이를 수행 할 수 있습니다 아마 미래의 안드로이드 X 라이브러리가 Kotlin에 쓰여질 수 있습니다 그럴 가능성이 높습니다 대부분의 것들로 우리가 선택한 것은 무엇입니까? 우리가 출판하는 것은 형제 유물이다

그래서 메인 도서관은 쓰여지고있다 Java 언어를 사용합니다 그리고 우리는 형제 유물로 Kotlin 언어 기능을 제공합니다 이것에 대해 대단한 점은 당신이하지 않는다는 것입니다 소비자에게 Kotlin 표준 라이브러리 강제 적용 그들이 명시 적으로 그것을 원하지 않는 한

확장 프로그램을 관리 할 수 ​​있습니다 API를 보강하는 데 필요한 것이 정확히 무엇인지, Kotlin 특정 기능을 사용할 수 있습니다 이것에 대해 정말 멋진 점은 확장하려는 라이브러리를 제어 할 필요가 없습니다 그래서 도서관을 이용하고 있다면 당신은 그것의 일부를 더 만들고 싶습니다 Kotlin-friendly, 당신은 그것을 할 수 있습니다

자신의 앱에서 또는 라이브러리에 대한 확장 집합을 게시 할 수 있습니다 다른 누군가가 발행하는 그러나 이들이 유일한 두 가지 옵션입니까? 나는 뭔가를보고 싶다 나는 제 3의 약간 잡종의 옵션으로 이끌 것이다라고 생각한다 그리고이 간단한 별칭 확장으로 돌아갑니다 우리는 자바 언어로 정의 된 정적 메서드를 사용했다 Kotlin 언어로 확장 메소드로 바꿨습니다

Java 측에서이 클래스의 구현을 살펴보면, 첫 줄을 포함 시켰습니다 왜냐하면 우리는 즉시 역 참조하는 것을 볼 수있다 우리가 전달하는 논쟁 문자열을 전달하자마자, 최대 문자 수는 얼마입니까? 내가 반복 할 수있는 순서대로 숫자가 있는지 여부를 확인하려면? 따라서 Java API로 Kotlin을 사용한다면, 이 매개 변수가 다음과 같은 것을 알 수 있습니다 플랫폼 유형이라고 불리는 것으로 노출 될 것입니다

null 허용 여부를 알 수 없습니다 그러나 구현을 통해 우리는이 사실을 즉시 알 수 있습니다 메서드는 null 값을 받아 들일 수 없습니다 우리가이 문제를 해결할 수있는 방법 null이 아닌 주석을 추가하는 것입니다 따라서이 주석은 Kotlin 컴파일러에게 알려주는 것입니다

거기에는 제한이있다 특수한 행동이 있다는 것을 계정을 고려해야합니다 아무도 통과하지 못하도록해야합니다 null 가능성이있는 값, 또는 null를이 메소드에 추가합니다 그래서 이것은 Kotlin의 언어 기능을 가능하게합니다

Java에는 단순히 존재하지 않습니다 이제이 시행을 허용 할 도구를 사용할 수 있습니다 Java에서 작동합니다 그러나 언어 자체가 본질적인 것은 아닙니다 그래서 우리가 무효를 위해서 그런 것을 할 수 있다면 – 이 주석을 nullness에 추가 할 수 있으면 Kotlin 컴파일러에게 필요한 것을 알리기 위해 이 메소드를 호출 할 때 동작을 변경하려면, 우리가 다른 것을 위해 이것을 할 수 있습니까? 말하자면,이 정적 메서드를 사용하려면 첫 번째 인수 정말 수신기입니다

그리고 이것이 실제로 확장 기능이 될 때 Kotlin에서 호출? 그리고 이것이 우리로 하여금 잠재적으로, 이것을 명시 적으로 정의 할 필요성을 제거합니다 확장 이 확장은 호출 규칙을 변경하기 위해서만 존재하며, 컴파일러에게 우리가 당신이 그것을 호출하도록 허용하고 싶다는 것을 알리기 위해 다른 방법으로 그리고 지금은, 우리는 이것 만 남았습니다 Kotlin 컴파일러는 주석, 마치 null이 아닌 주석을 본 것처럼, 그것으로부터 무언가를 유추하고 너는 그걸 더 많이 말하는거야

그 언어에 관용적 인 바이트 코드에서, 우리는 그렇지 않으면 쓰려고했던 것을 얻는다 우리는 여전히 static 메소드를 호출합니다 수신기가 첫 번째 인수가됩니다 이 예제는 어떻습니까? 당신이 알아챈 한 가지는 이 확장의 이름은 setPadding이 아니라 updatePadding입니다

이제이 확장을 setPadding이라고 부를 수 있습니다 그러나 문제는 그것이 단지 인수의 하위 집합에 대한 작업 그래서이 경우, 우리는 단지 어디에 왼쪽 및 오른쪽 값을 전달하면 setPadding을 호출 할 수 있습니다 그리고 그것은 잘 작동합니다 그러나 우리가 왼쪽에서 오른쪽으로, 그리고 나서 맨 아래에서 통과한다면, 우리는 네 가지 주장을 제시 할 것입니다

그리고 Kotlin 컴파일러는 실제 패딩 패딩은 네 개의 인수를 받아들입니다 그리고 그것은 진짜 것을 부르는 것을 선호 할 것입니다 그리고 실제 매개 변수에는 명명 된 매개 변수가 없습니다 컴파일 오류가 발생합니다 그것이 바로이 updatePadding의 이름입니다

우리가 진짜 setpadding을 보면 – 4 개의 정수를 취하는 간단한 방법 – 우리가 Kotlin 컴파일러에게 알릴 수 있다면 어떨까요? 이 매개 변수에는 그와 관련된 이름이 있습니까? 자, 매개 변수 이름에서 이것을 추측하는 것이 좋을 것입니다 중복을 지정하지 않아도됩니다 하지만 나는 그것을 주장한다 주석에있는 이들 이름에 대해 명시 적으로 잘 설명합니다 Java 8 바이트 코드에서 실제로 매개 변수 이름을 유지할 수있는 방법입니다

그래서 Kotlin 컴파일러는 이론적으로 그것들을 사용할 수 있습니다 그러나 한 가지 문제는 모든 것이 든 없든 이 행동을 선택해야합니다 갑자기 모든 매개 변수 이름 귀하의 도서관을 가로 질러 돌로 설정되어 있습니다 반면 특수 효과를 사용하면 점진적으로 마이그레이션 할 수있는 기능 따라서 이것은 명명 부분을 해결할 잠재력을 가지고 있습니다

지금, 우리는 Kotlin에서 진짜 방법을 부를 수 있습니다 우리가 원하는 순서대로 4 개의 인수를 지정하면, 우리가 제공하는 이름을 기반으로합니다 기본 값은 어떻습니까? 코 틀린 표정을 지정할 수 있다면 어떨까요? 컴파일러는 컴파일러가 하나는 당신이 공급하지 않았습니까? 이렇게하면 원래의 확장 호출 규칙이 변경됩니다 확장 기능을 호출하는 것에서 실제로 사용하는 것까지 진짜 방법 그런 다음 바이트 코드에서 우리는 우리가 시작한 것, 우리의 명백한 확장 인라인 할 것이다

하지만 지금은 확장이 존재하지 않아도됩니다 특수 효과 형식으로 추가 한 메타 데이터 Kotlin 컴파일러에게 우리에게 우리의 전화 능력을 향상시키고 자했다 이 기능은 코 틀린 특정 방식으로, Kotlin 기능을 활용합니다 그래서 우리는 그렇게 할 수 있습니다 그래서 Kotlin은 KEEP이라고하는이 과정을 가지고 있습니다

Kotlin 진화 및 향상 프로세스입니다 오늘 아침 우리는 이러한 주석을 제안했습니다 KEEP-110으로 이것이 우리가 제안하는 것입니다 Kotlin 컴파일러에 추가하여 이러한 주석을 이해하십시오 우리는 ExtensionFunction과 ExtensionProperty를 가지고 있습니다

정적 메소드 용; 기본값, 매개 변수에 대한 공급 및 기본값을 허용합니다 KtName을 사용하면 메소드, 필드 또는 매개 변수의 대체 이름을 제공합니다 이제는 매우 빠릅니다 이러한 이름은 변경 될 수 있습니다 의미가 변경 될 수 있습니다

이것은 실제로 받아 들여지지 않을 수도 있습니다 Kotlin 컴파일러에 넣습니다 우리는 JetBrains 팀과 협력 해 왔습니다 이것에 대해 꽤 오랫동안 그리고이 중 일부는 이미 프로토 타입 화되어 있습니다

Kotlin 컴파일러 내부 우리는 이것이 이것이 우리가 향상시킬 수있는 방법이라고 생각합니다 Kotlin 발신자 용 Android 프레임 워크, 실제로 Android를 다시 작성하지 않고도 프레임 워크, 또는 적어도 API, Kotlin에서 실행할 수 있는 그리고 이것이 중요한 선택 임에도 불구하고, 실제로 그것을 Kotlin 컴파일러로 만든다고 가정합니다 모든 문제를 완전히 해결하지는 못한다

기존 확장이 해결되고 있음을 KEEP-110에서 제안한 이러한 주석을 결정했습니다 수많은 오픈 소스 라이브러리를 살펴보고, 우리 자신의 도서관을보고, 우리가 가장 유용한 확장이라고 생각했던 것을 보았습니다 자바 메소드의 패턴이 원하는대로 확장으로 변환 될 수 있습니다 그리고 후자의 두 가지는 실제로 보완 적입니다 특수 효과의 큰 장점 당신이 진리의 유일한 원천을 유지한다는 것입니다

당신은 정말로 Kotlin을 알 필요가 없습니다 빌드 시스템에 Kotlin 컴파일러를 추가 할 필요가 없습니다 형제 유물을 게시 할 필요가 없습니다 순수한 자바 라이브러리 일지라도, 이러한 특수 효과를 추가하고 API를 향상시킬 수 있으므로 Kotlin 호출자는 더 관용적 인 구문을 사용합니다 괜찮아

요약하자면, Core-KTX는 이제 Android Jetpack의 일부입니다 Android Jetpack과 함께 출시 된 Android Jetpack으로 버전이 지정되었습니다 화면에 표시되는 것처럼 몇 가지 새로운 아티팩트가 있습니다 확실히 더 많은 것이 있습니다 우리가 생각하는 주목할만한 것들 조각 및보기 모델입니다

그래서 나는 유물을보고 놀랄 것입니다 앞으로 몇 개월 안에 Kotlin 버전을 확인하십시오 참조 문서의 이것은 매우 빠릅니다 이것은 [? 도카?] 우리가 어떻게 문서를 생산하는지 그래서 우리는 단지 거기에 나가서 당신을 미리보기로 보여주고 싶었습니다

이것은 분명히 적극적으로 노력하고 있습니다 Android 버그에 새로운 구성 요소가 있습니다 안드로이드 KTX에 대한 추적기 Core-KTX와 모든 KTX 라이브러리 진실의 원천 인 제트 팩의 일부가되었습니다 Android 지원 리포지토리로 이동했습니다

GitHub 문제를 GitHub로 마이그레이션 할 것입니다 앞으로 몇 주 안에이 버그 트래커에 프로젝트를 맡기십시오 하지만 우리는 여전히 GitHub 레포에 대한 요청을 받아 들일 것입니다 GitHub 저장소로 다시 동기화합니다 문제가 더 이상 나타나지 않을 것입니다

GitHub에서 진실의 근원 Android 버그 추적기에 표시됩니다 [? KEEP?]이 제안되었습니다 한 시간 전에 풀 요청을 만들었습니다 가서 확인해 봐

이 문서에는 예제에 대해 더 자세히 설명되어 있습니다 그리고 내가 말했듯이, 선택된 주석 우리가 가장 큰 영향을 줄 것이라고 생각하는 것들이었습니다 그러나 문서의 맨 아래에, 당신은 그것을 볼 것입니다, 만약 이와 같은 것이 받아 들여지면, 미래의 더 많은 향상을위한 잠재력이 있습니다 그 링크가 이것이어야합니다 어제 밤 제가 제출하기 전에이 링크를 만들었어요

잘하면, 정확합니다 그리고 그게 다야 고맙습니다 [박수 갈채] [음악 재생]

스마트 블루투스 분실방지(anti-lost)장치 리뷰(개봉기, 사용기)

안녕하세요, B 구매 및 말장난입니다 오늘, 너를 보여줄거야

블루투스를 사용하는 안티 분실 장치 우리는 2를 주문했다 그리고 그것은 약 3 ~ 4 $이었다 있다 두 몸체, 2 개의 매뉴얼 두 개의 QR 코드 논문 너는 이것에 대해 궁금해 할 것이다 이것은 일종의 열쇠 고리입니다 자동차 열쇠 또는 ​​집 열쇠가 누락되었을 때 APP에서 버튼을 누를 때 소리를 통해 경보하고 휴대 전화를 통해 켜집니다 열쇠를 찾는 데 도움이됩니다

그것은 좋은 디자인, 단순하고 비행기를 가지고있다 열쇠 고리가 멍청하지 않아 그럼, 앞에 파고가있어, 열어 보자 bettery 모델 CR2032L가 있습니다 그것은 리모콘에서 배터리로 사용합니다

닫아 사용은 매우 간단합니다 잠깐 만요 그것은 두 번 벌, 꿀벌 소리를 낸다 그것은 그것이 켜져 있음을 의미합니다 두 번째로 다시 밀어 넣으십시오

그것은 꿀벌 소리를 만들어 ~ 그것은 그것이 tuen 것을 의미합니다 그것을 켜고보고, 사용하는 방법을 배우자 켜져있다 핸드폰 켜기 플레이 스토어에 앱 ITracing 설치하기 그것을 excute 앱을 시작할 때 기기를 서서히 움직이는 앱 MLE-15를 볼 수 있습니다 연결을 누릅니다

앱이 몇 초 안에 기기를 연결합니다 핸드폰을 가지고 있지만 차 열쇠를 찾을 수 없을 때 이 경우에는 실제로 여러 번 있습니다 앱에서 알람 푸시 장치가 소리를 낸다 그것은 약간의 소리와지도를 위해 조금 불편하다 따라서 키를 찾으면 APP에서 알람을 중지합니다

같은 시간에 두 명을 사용하고 있습니까? 다른쪽으로 돌리자 켜져있다 APP에서 찾기 APP에 나타났습니다 두 장치를 구별하지 못했습니다 그것은 변경 될 수 있습니다, 화살표를 추진 이름, 예 : 자동차 열쇠 변경되었습니다

그럼, 자동차 열쇠가 빠졌어요 푸시 알람 두 번째 장치 연결 이것은 집 열쇠입니다 홈 키가 누락되었습니다 그것은 소리를 낸다 다른 방법으로, 당신은 휴대폰을 놓치고 있습니다

기기에서 두 번 누릅니다 핸드폰이 시끄러운 소리를 낸다 그리고 그 눈부신 휴대 전화가 설립되면 만지면 경보가 꺼진다 과 휴대 전화와 멀리 떨어져 있으면 연결이 끊어집니다 휴대 전화에서 알람이 발생합니다

내가 리뷰 할 때 여기서 멀어 질 수는 없어 나는 장치를 끄고 잃어버린 신호와 같은 상황을 만들 것입니다 전원이 꺼지면, 잠시 후 경보를 울린다 신호가 손실 되었기 때문에 그렇다면 어디에서 사용할 수 있습니까? 어디에서 사용할 수 있습니까? 생각 해봐, 귀중한 것들이있다 카메라, 지갑, 물건들처럼 장치가 걸려있다

누가 가치있는 것을 훔쳐 갔는지 생각해 봅시다 그래서 휴대 전화에서 멀리 떨어진 장치 그런 다음 휴대 전화는 블루투스가 불일치 할 때 경보를 울립니다 또 다른 사용법, 주위에 걸어 다니는 아이가있다 아이가 너에게서 멀리 떨어져 있다면 심각한 문제가 될거야 목걸이가 달린 개처럼 애완 동물도 이것을 위해 사용될 수있다

핸드폰과 얼마나 멀리 떨어져 있니? 수동으로 75 피트 (약 27m) 물론 장벽은 없다 이제 특정 기능을 살펴 보겠습니다 화면 아래쪽에 메뉴가 있습니다 카메라 메뉴를 볼 수 있습니다 그것을 만져 라

그러면 휴대폰 excute 카메라 및 푸시 장치 버튼 휴대 전화가 사진을 찍는다 시원해 보인다 잘 작동합니다 세 번째 메뉴는 위치입니다

만지다 내 위치 찾기 및 푸시 버튼 화면에 "위치 확인 완료"와 핸드폰 기록 현재 위치 하지만 이미 많은 좋은 추적 응용 프로그램이 있습니다 하지만 어떻게 사용할 수 있을지 궁금합니다 그래서 나는 매뉴얼을 읽었다 그것은 우리가 차에 돌아올 때 차를 주차하고 차를 찾는 loaction을 저장하는 것을 말한다

하지만 내부 주차장이 많아서 쓸모가 없다고 생각합니다 위치 옆에 설정이 있습니다 처음에는 방해하지 않는다 매너 모드를 의미합니다 둘째, 앱 비밀번호 편치 않은 셋째,지도 스위치, 그것은 Google지도와 바이지도 사이의지도 유형을 결정합니다 두 번 클릭 설정이 있습니다

2 번 전에 버튼을 눌렀을 때 핸드폰이 알람을 울렸다 두 번 누르면 음성 녹음을 위해 설정할 수 있습니다 녹음을 위해 설정 기기 메뉴로 이동하여 두 번 누릅니다 화면에 "녹화 시작"을 표시합니다 핸드폰에서 음성 녹음 중입니다

너는 음성 녹음을 끝낸 것 같아 버튼을 다시 두 번 누릅니다 opps, 약간의 버그가있다 푸시 버튼 두 번 깜박임 당신은 "녹음 중지" 음성 녹음이 끝났습니다 앱 설정에서 레코드 목록으로 이동 기록 된 목록이 있습니다

그것을 연주해라 예, 확인했습니다 휴대 전화가 밖에 나가면 기밀로 음성을 녹음하기가 어렵습니다 나는이 상황을 위해이 기능이 만들어 졌다고 생각한다 그렇다면 단지 화면 만 작동합니까? 주 화면 및 푸시 버튼에서 두 번 녹음 시작 APP 다시 보겠습니다

그래서 거기에 speacial 기능은 없습니다 처음에, 이 APP를 다운로드했습니다

이 앱이 한국인이기 때문에 나는이 앱에 놀랐다 그리고 당신은 "소개 메뉴" 매뉴얼은 한국어로 쓰여졌다 더 이상 speacial 기능은 없습니다 마지막으로,이 리뷰를 정리합시다 우습게도, 우리가 집을 비울 때, 바쁜 때, 셀폰이 설립되었습니다

그러나 차 열쇠는 발견되지 않았다 그런 상황이있다 정반대의 상황도 일어났다 우리가 3 $를 사서 그것을 열쇠에 걸어 놓으면, 열쇠를 찾는 것이 더 쉬울 것입니다 3 $에 대해서는 나쁘지 않습니다

나는 보통의 열쇠 고리를 사는 것은 약 3 $ ~ 5 $ 걸릴 것 같아요 그래서, 우리가 귀중한 것들에 매달 리거나 사기성을 내면, 도움이 될 것입니다 좋은 디자인과 가벼운 디자인 배터리는 거의 반년을 유지합니다 그것은 블루투스 40입니다 초 저전력 소비 수동으로

자, 이제 B 살 & 말장난 보고 주셔서 감사합니다

How to download & Use Lucky Patcher Android Without Root (100% Working)

안녕하세요 내 채널로 돌아 오신 것을 환영합니다

럭키 패쳐를 다운로드하고 루트없이 사용하는 방법을 오늘 설명하십시오 문제가있는 경우 내 채널을 구독하고 좋아요를 말하고 댓글을다는 것을 잊지 마세요 내가 루트를 사용하는지 확인해 보도록하겠습니다 그렇지 않으면 루트가 없습니다 브라우저를 열고 mrshehab-tito

blogspotcom을 검색하십시오 다운로드 클릭 다운로드 후 그냥 Playstore에서 winrar를 다운로드해야합니다 행운의 패치를 설치하십시오 계속 클릭하십시오 이제 해킹 할 게임을 봅시다

나는 배고픈 상어를 해킹 할 것이다 배고픈 상어를 찾아라 패치 메뉴를 클릭하십시오 수정 된 apk 파일 만들기를 클릭하고 apk를 클릭하여 앱 및 레벨을 다시 작성하십시오 에뮬레이션 파일로 이동하여 제거하고 설치하십시오

설정을 클릭하십시오이 소스에서 허용 '을 클릭하십시오 지금 내가 볼 수있는 것을 보아라 내 비디오가 마음에 들면, 나를 좋아하고 코멘트하고 구독 해주세요 감사합니다

지켜보기 위해

APNの設定-Android 8.0-ZenFone 4 (ZE554KL)

"APN 설정"을합니다 "설정"탭 '무선 및 네트워크'를 탭 '모바일 네트워크'를 탭 "액세스 포인트 이름"을 눌러 사용하는 서비스 이름을 찾고 '마루'를 탭 "서비스 이름"이없는 경우 "+"를 눌러 "이름"을 눌러 입력 다른 항목은 서비스 제공자가 공개 한 'APN 설정 정보 "를 확인하여 입력합니다

입력이 끝나면 "3 개의 점"을 눌러 '저장'을 탭 저장된 이름을 찾고, '마루'를 탭 "모바일 데이터 통신」수 있는지 확인합니다 "설정"탭 '무선 및 네트워크'를 탭 "Wi-Fi"를 해제합니다 '모바일 네트워크'를 탭 "통신"을 사용합니다 'Chrome'을 시작하여 페이지가 표시되는 것을 확인합니다 확인 한 후 Wi-Fi를 사용하는 경우 사용합니다

데이터 통신을 사용하지 않는 경우 비활성화합니다 "APN 설정"을 변경하는 경우 "이름"을 누르면 변경할 수 있습니다 변경이 끝나면 "저장"을 누릅니다

Сетевая карта USB для Android Win Mac обзор

연결 포트가없는 울트라 북이 있습니다 이더넷 메쉬

Windows 기반의 태블릿 항구가 없으며 훨씬 더 그렇습니다 집에 집이 하나도 없다 유선 LAN 포트가있는 컴퓨터 만 WiFi 그러나 때때로 나는 이 매우 로컬 네트워크를 통해 연결하십시오 음 가장 눈에 띄는 예는 일부 라우터가 펌웨어 또는 설정을 와이어 연결

같은 open-wrt 펌웨어에서 WiFi 설정 재설정은 기본적으로 비활성화되어 있습니다 그래서 나는 결정했다 이더넷 네트워크를위한 USB 네트워크 공유 상점에는 맥북과 일부 nout을위한 몇 가지 모델 Lenovo 몇 천 루블에 USB 3

0, 기가비트 및 가격표가 있습니다 나는 그런 종류의 망할 것을 필요로하지 않는다 우리는 eBay에 간다 싸구려 여기에서 투명한 단일체의 경우, 하나의 케이스에는 커넥터와 USB 및 LAN이 모두 있습니다 이 옵션 나는 그가 정말로 일어나기 때문에 그것을 정말로 좋아하지 않는다

틀린 쪽을 가진 항구에, 노트북은 그것에 매달릴 것이다 결국 그것은 모두 망할 것입니다 어머니 따라서 조금 더 비싼 걸로 – 맥북 클론 어댑터, USB 용 꼬리 약속 USB 2

0 및 100 메가 비트 네트워크 페니만한 가치가있어 우리가 가져가 Unboxing! 원칙적으로 만들어진다 물론 나쁘지는 않지만 싼 느낌입니다

포함됨 카드 자체 외에 드라이버 디스크가 있습니다 거시기도 분명하다 삽입 할 곳이 없다 운전 그건 그렇고 – 돼지, samopisnaya 그러나 나는 그 내용을 여전히 내 놓는다

사이트에서 – 누가 다운로드해야하는지 일반적으로 운전자와 운전 중국어 장치에는 바이러스가 많이 포함되어 있기 때문에, 그래서 어떤 경우에도 실행하려고하지 마십시오 그 (것)들에게서 어떤 임명자든지 드라이버 자체 만 사용하십시오 Windows의 업데이트 도구를 통해 그래서, 연결 Windows에서 컴퓨터로, Windows에서 태블릿을 통해 OTG 어댑터

그곳에는 장치가 정의되어 있지만 운전자 안돼 보죠 기기 제조업체의 웹 사이트 Szjpkj – 다운로드 섹션이 없습니다 글쎄, 또는 찾지 못했습니다 사이트에서 칩셋 Corechips 단면도 다운로드의 제조자는, 그러나 로그인하려면 암호가 필요합니다

나는 몇몇을 발견했다 비밀번호로 로그인하지만, 불행히도 적합하지 않습니다 Windows 웹 사이트 이 칩셋 용 드라이버가 있습니다 카탈로그가 재미있다 Windows는 Internet Explorer가 작동해야하며 작동하지 않습니다

이 매우 Internet Explorer에서도 그러나 사용하지 않으면 검색을 클릭하면 드라이버를 다운로드 할 수 있습니다 보관실에서 성기에 즉, 인터넷에서 Windows, Mac 및 Android 용 드라이버를 다운로드 했으므로, VID_0FE6 & PID_9700에서 간단한 검색의 이점은 무리를 만듭니다 링크 나는 또한 나의 웹 사이트에 운전사를 둘 것이다, 설명의 참조

Windows 81에서는 64 비트를 받았습니다 Android 7의 경우 XDA에 대한 테마가 있습니다 드라이버를 컴파일하고 실행하는 방법을 설명합니다 안드로이드 타블렛, 물론, rutovanom에 devaysa 작동합니다

이것이 제가 거부 한 이유 중 하나입니다 iOS 나 Android와 같은 모바일 똥 Windows 환경 드라이버에는 문제가 없으므로 Windows에서 태블릿이 시작되었습니다 그리고 너는 너와 멀리 떨어져있어 Android 및 iPad

장치에는 점등되는 LED가 있습니다 로컬 네트워크에 연결할 때 작동 중, LED 깜박입니다 속도에 관해서 위쪽 막대는 다음과 같습니다

한 번 우리의 성격 JP1081B 아래의 바는 같은 컴퓨터입니다 동일한 라우터에 연결되지만 Wi-Fi로 연결됩니다 보시다시피, QF9700은 WiFi보다 4 배 느리고, 모든 것이 다른 방향이어야합니다 실험 순도 나는 네트워크 포트가있는 오래된 노트북을 발견했다

같은 라우터에 연결했습니다 그는 결과를 보여 주었다 WiFi의 수준에서, 즉, 내 속도로 사용할 수있는 최대 속도 그것도 4 배 빠릅니다 JP1081B

아니오, 100 m / bit가 없습니다 최고 10 m / bit 어떤 결론을 내릴 수 있습니까? 어댑터가 망했어, 천천히, 그러나 그것은 효과적이다 나는 기본적으로 그의 속도에 신경 쓰지 않는다 – 예기치 않은 상황이 발생했을 때, WiFi 신호가 없을 때

내가 그것을 사용하지 않을 것을 감안할 때, 그런 돈을위한 백업 솔루션으로 그 자체