# Checkin where do these names come from? ~~~go req_body := protobuf.Message{ 4: protobuf.Message{ // checkin 1: protobuf.Message{ // build // sdkVersion // multiple APK valid range 14 - 0x7FFF_FFFF // single APK valid range 14 - 28 10: protobuf.Varint(28), }, 18: protobuf.Varint(1), // voiceCapable }, // version // valid range 2 - 3 14: protobuf.Varint(3), 18: protobuf.Message{ // deviceConfiguration 1: protobuf.Varint(c.Touch_Screen), 2: protobuf.Varint(c.Keyboard), 3: protobuf.Varint(c.Navigation), 4: protobuf.Varint(c.Screen_Layout), 5: protobuf.Varint(c.Has_Hard_Keyboard), 6: protobuf.Varint(c.Has_Five_Way_Navigation), 7: protobuf.Varint(c.Screen_Density), 8: protobuf.Varint(c.GL_ES_Version), 11: protobuf.String(native_platform), }, } for _, library := range c.System_Shared_Library { // .deviceConfiguration.systemSharedLibrary req_body.Get(18).Add_String(9, library) } for _, extension := range c.GL_Extension { // .deviceConfiguration.glExtension req_body.Get(18).Add_String(15, extension) } for _, name := range c.New_System_Available_Feature { // .deviceConfiguration.newSystemAvailableFeature req_body.Get(18).Add(26, protobuf.Message{ 1: protobuf.String(name), }) } req, err := http.NewRequest( "POST", "https://android.googleapis.com/checkin", bytes.NewReader(req_body.Marshal()), ) ~~~ one of these: ~~~ > adb shell pm list packages android com.android.backupconfirm com.android.browser com.android.calculator2 com.android.camera com.android.captiveportallogin com.android.certinstaller com.android.contacts com.android.customlocale2 com.android.defcontainer com.android.deskclock com.android.development com.android.development_settings com.android.dialer com.android.documentsui com.android.dreams.basic com.android.emulator.smoketests com.android.exchange com.android.externalstorage com.android.fallback com.android.gallery com.android.gesture.builder com.android.htmlviewer com.android.inputdevices com.android.inputmethod.latin com.android.keychain com.android.location.fused com.android.managedprovisioning com.android.mms com.android.mms.service com.android.music com.android.netspeed com.android.packageinstaller com.android.pacprocessor com.android.phone com.android.printspooler com.android.protips com.android.providers.calendar com.android.providers.contacts com.android.providers.downloads com.android.providers.downloads.ui com.android.providers.media com.android.providers.settings com.android.providers.telephony com.android.providers.userdictionary com.android.proxyhandler com.android.sdksetup com.android.server.telecom com.android.settings com.android.sharedstoragebackup com.android.shell com.android.smoketest com.android.smoketest.tests com.android.soundrecorder com.android.speechrecorder com.android.systemui com.android.vpndialogs com.android.wallpaper.livepicker com.android.webview com.android.widgetpreview com.example.android.apis com.example.android.livecubes com.example.android.softkeyboard com.google.android.apps.maps com.google.android.calendar com.google.android.googlequicksearchbox com.google.android.launcher com.google.android.play.games com.google.android.street com.google.android.syncadapters.contacts com.svox.pico jp.co.omronsoft.openwnn com.google.android.gms com.google.android.gsf com.google.android.gm com.google.android.gsf.login ~~~ not this: ~~~ package:com.android.vending ~~~ here it is: ~~~ com.google.android.gsf_7.1.2> rg 10.+sdkvers sources\com\google\android\gsf\checkin\proto\Logs$AndroidBuildProto.java 265: output.writeInt32(10, getSdkVersion()); ~~~