programing

Play 스토어를 열지 않고 프로그래밍 방식으로 애플리케이션을 설치하는 방법 (Google 드라이브처럼)

yoursource 2021. 1. 15. 19:52
반응형

Play 스토어를 열지 않고 프로그래밍 방식으로 애플리케이션을 설치하는 방법 (Google 드라이브처럼)


오늘 Google 드라이브 앱에서 새 앱 스프레드 시트 및 문서를 설치할 것인지 물었습니다.

동의했습니다. Google Play 스토어가 열리기 때문에 설치를 누릅니다.

그렇지 않았습니다 . Play 스토어의 모든 앱에서 "설치"를 누를 때 나타나는 것과 동일한 설치를 확인하기 위해 각 앱의 권한이있는 팝업을 표시했습니다.

나는 이것이 행해질 수 있다는 것을 몰랐다.

앱에서이 동작을 어떻게 재현 할 수 있습니까? Google Play 스토어를 열 필요가없는 "앱 XPTO 설치"버튼이 있습니까? 권한 대화 상자를 표시하고 Play 스토어를 통해 설치를 계속 하시겠습니까?


최신 정보:

다른 질문과 동일하다고 생각하기 때문에 반대하는 사람들에게는 ... 그렇지 않습니다!

이 경우 APK는 Google Drive 앱에서 다운로드 한 다음 설치되지 않습니다. Google 드라이브 " "Play 스토어에 다운로드 및 설치를 지시 합니다.

이것이 제가 관심있는 API입니다.

내 사례를 지원하려면 : INSIDE Google Drive를 눌러 Play 스토어를 열지 않고 앱을 설치하면 다운로드가 시작됩니다 . 다운로드하는 동안 Play 스토어를 열어 다음 사항을 확인했습니다.

여기에 이미지 설명 입력

스크린 샷은 APK를 다운로드하고 설치하는 Google 드라이브가 아님을 증명합니다. Play 스토어입니다.


Google 드라이브의 로그에 따르면 Google Play 스토어에 앱 설치를 '알리는'활동이

com.google.android.apps.docs/com.google.android.apps.docs.app.PhoneskyApplicationInstallerActivity

분명히 "말한다"

com.android.vending/com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity

필요한 패키지를 설치합니다.

그래서 이론적으로는 의도를 만들 수 있습니다.

Intent intent = new Intent("com.android.vending.billing.PURCHASE");
intent.setClassName("com.android.vending",
        "com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity");
intent.putExtra(EXTRA_NAME, EXTRA_VALUE);
startActivityForResult(intent, 0);

정확한 추가 값과 voilà!

However, calling LightPurchaseFlowActivity from non-Google signed app is failing, because they are, again apparently (according to the logs), checking the calling package's signature:

W/Finsky(13209): [1] LightPurchaseFlowActivity.setupFromExternalPurchaseIntent: Called from untrusted package.

So, there, this can not be achieved at this moment.


Google+ now implements buttons where you can directly download an app (see this link) without clicking the button on the play store site.

The link looks like this: https://play.google.com/store/apps/details?id=com.example.app&rdid=com.example.app&rdot=1&feature=md

If you add the rdid, rdot and feature parameter it works on my phone (if I type it in the browser, not tested with an intent and not tested to update an app, only installing it).

Edit:

I found out that you only need to add the rdid-parameter to the url. Source: http://www.androidb.com/2014/04/increase-app-installs-with-a-single-trick/

Edit2:

Does not work with an intent. :(


I'd say that the Google Drive has system permissions, just like the Play Store. Probably because it is signed with Google's signature.

If you manage to have the "android.permission.INSTALL_PACKAGES" permission you can call the API (which is not included in the android.jar deployed by SDK Manager, you have to get the hidden APIs from the android.jar in the emulator for instance) to install the applications.

So, basically, unless you have system permissions (by putting your APK into /system/app, signed with OEM certificate or with root) you won't be able to do it.

출처 : 이미 프로그래밍 된 일부 시스템 앱

--- 업데이트

물론 Play 스토어에는 모든 애플리케이션을 설치하는 데 사용할 수있는 문이있을 수 있지만,이를 위해서는 스스로 얻을 수없는 권한이 필요할 수 있습니다.


apk 파일이있는 위치를 알고 있으면 쉽게 할 수 있습니다.

File file = new File(dir, "YourApp.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);

참조 URL : https://stackoverflow.com/questions/23695170/how-to-install-applications-programmatically-without-opening-play-store-as-goog

반응형