【问题标题】:Release key fails to work with deployed app发布密钥无法与已部署的应用程序一起使用
【发布时间】:2019-07-29 09:21:04
【问题描述】:

我使用来自 youtube 的视频教程创建了一个发布密钥,不幸的是,我在部署之前创建的发布密钥没有 .扩大。当在谷歌云平台上检查以限制我的应用程序的密钥时,他们需要一个 .keystore 扩展名。但随后用于创建发布密钥的 android 教程具有 .jks 扩展名。扩展真的很重要,因为我的应用程序拒绝显示谷歌地图并且 facebook 登录也无法工作吗?下面是我的 android manifest 和模块应用程序

然而,我已经向 google play store 发送了一封邮件,要求更改我的发布密钥(使用带有 .jks 扩展名的 android 教程),但仍未收到回复。

以下是我查看的一些链接以寻求帮助

(教程) https://www.youtube.com/watch?v=AWawL5HFn64

Release APK file not showing google maps

https://developer.android.com/studio/publish/app-signing#generate-key

build.gradle(模块:app)

apply plugin: 'com.android.application'
android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "com.readygo.showmoney"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 7
        versionName "1.0.5"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude '.readme'
    }

    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }

    sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/res/avataruni'] } }
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:2.0.0-beta2'
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    testImplementation 'junit:junit:4.13-beta-3'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.kaopiz:kprogresshud:1.1.0'
    implementation 'com.wrapp.floatlabelededittext:library:0.0.6'
    implementation 'com.makeramen:roundedimageview:2.3.0'
    implementation 'com.github.fuzz-productions:RatingBar:1.0.3'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.github.florent37:singledateandtimepicker:2.0.4'
    implementation 'com.github.dmytrodanylyk.shadow-layout:library:1.0.3'
    implementation 'com.zcw:togglebutton-library:1.0.0'
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'com.seatgeek:placesautocomplete:0.3-SNAPSHOT'
    implementation 'com.google.android.gms:play-services-location:17.0.0'

    //implementation 'com.google.android.gms:play-services-places:17.0.0'
    implementation 'com.google.android.libraries.places:places:2.0.0'

    implementation 'com.android.support:recyclerview-v7:28.0.0'

    // Firebase
    implementation 'com.google.android.gms:play-services-auth:17.0.0'

    //facebook
    implementation 'com.facebook.android:facebook-login:[5,6)'

    // volley plus
    // implementation 'dev.dworks.libs:volleyplus:0.1.4'

    // retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
    implementation 'com.squareup.retrofit2:converter-scalars:2.6.0'

    // okhttp
    implementation 'com.squareup.okhttp3:okhttp:4.0.1'

    // gson
    implementation 'com.google.code.gson:gson:2.8.5'

    // permission manager
    implementation 'com.karumi:dexter:5.0.0'

    // date management
    implementation 'net.danlew:android.joda:2.10.2'

    //apache common util
    implementation 'org.apache.commons:commons-collections4:4.4'

    //smart-location-lib
    implementation 'io.nlopez.smartlocation:library:3.3.3'

    //dialog progress bar
    implementation 'com.github.d-max:spots-dialog:1.1@aar'

    //pushy
    implementation 'me.pushy:sdk:1.0.43'

    //multi dex
    implementation 'com.android.support:multidex:1.0.3'

    //string manipulation
    implementation 'org.apache.commons:commons-lang3:3.9'

    // exit interface
    implementation "com.android.support:exifinterface:28.0.0"

    //custom tabs
    implementation "com.android.support:customtabs:28.0.0"

}
apply plugin: 'com.google.gms.google-services'

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.readygo.showmoney">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-feature android:name="android.hardware.camera" />

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <uses-feature android:name="android.hardware.location.gps" />

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <application
        android:name=".app.AppController"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".activities.Act_Shop_Billing"></activity>
        <activity
            android:name=".activities.ShopSearchActivity"
            android:windowSoftInputMode="stateHidden" />
        <activity android:name=".activities.Act_Main_Rating" />
        <activity android:name=".activities.Create_Update_Holiday_Break" />
        <activity android:name=".activities.CreateAppointment" />
        <activity
            android:name=".activities.Act_Splash"
            android:screenOrientation="portrait"
            android:theme="@style/FullScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>

        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>

        <activity
            android:name=".activities.Act_Login_Option"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Login"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.SendEmailActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Reg_Customer"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Reg_Barbers"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Home_Cust"
            android:screenOrientation="portrait" />
        <!--
             The API key for Google Maps-based APIs is defined as a string resource.
             (See the file "res/values/google_maps_api.xml").
             Note that the API key is linked to the encryption key used to sign the APK.
             You need a different API key for each encryption key, including the release key that is used to
             sign the APK for publishing.
             You can define the keys for the debug and release targets in src/debug/ and src/release/. 
        -->
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

        <activity
            android:name=".activities.Act_Maps"
            android:label="@string/title_activity_maps" />

        <service
            android:name=".service.GpsService"
            android:enabled="true" />

        <activity
            android:name=".activities.SelectBookDateActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Choose_Photo"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.OpeningHoursActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_DayTime_Choice"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Add_Service"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Add_Barber"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Home_Barber"
            android:screenOrientation="portrait" />
        <activity
            android:name=".activities.Act_Upload_Profile_Picture"
            android:screenOrientation="portrait" />

        <activity android:name=".activities.Act_Barber_Shop_Services" />
        <activity android:name=".activities.Act_BookingHistory_BarberShop" />
        <activity android:name=".activities.UpcomingBarberShopBookingActivity" /> <!-- Pushy Declarations -->
        <!-- Pushy Notification Receiver -->
        <!-- Incoming push notifications will invoke the following BroadcastReceiver -->
        <receiver
            android:name=".activities.PushReceiver"
            android:exported="false">
            <intent-filter>

                <!-- Do not modify this -->
                <action android:name="pushy.me" />
            </intent-filter>
        </receiver> <!-- Pushy Update Receiver -->
        <!-- Do not modify - internal BroadcastReceiver that restarts the listener service -->
        <receiver
            android:name="me.pushy.sdk.receivers.PushyUpdateReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
            </intent-filter>
        </receiver> <!-- Pushy Boot Receiver -->
        <!-- Do not modify - internal BroadcastReceiver that restarts the listener service -->
        <receiver
            android:name="me.pushy.sdk.receivers.PushyBootReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver> <!-- Pushy Socket Service -->
        <!-- Do not modify - internal service -->
        <service android:name="me.pushy.sdk.services.PushySocketService" /> <!-- Pushy Job Service (added in Pushy SDK 1.0.35) -->
        <!-- Do not modify - internal service -->
        <service
            android:name="me.pushy.sdk.services.PushyJobService"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE" />
        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />
    </application>

</manifest>

对于谷歌地图,它显示一个完全空白的屏幕,没有任何标记或地图显示。

Facebook 登录显示消息“登录错误:登录此应用程序时出错。请稍后再试”尽管出现错误消息,我也能够获取哈希键并将其直接添加到 facebook 开发人员网站,它仍然无法正常工作。

【问题讨论】:

  • 你上传到Play商店了吗? . 扩展名没什么大不了的
  • 是的,我将它上传到了 Play 商店,这时我注意到地图显示为空白,并且 Facebook 登录向我显示了错误消息。但它在调试模式下完美运行,因为我使用调试密钥库将 SHA 添加到谷歌控制台并将哈希键添加到 facebook。 @Hanzala
  • 检查我的答案

标签: java android


【解决方案1】:

首先在你的 build.gradle 应用模块中添加这个

android {
    signingConfigs {
        release {
            keyAlias 'XXXXX'
            keyPassword 'XXXXX'
            storeFile file('../keystore/XXXXX') // Add in project_directory/keystore/ don't worry about extention
            storePassword 'XXXXX'
        }

buildTypes {
        release {
            signingConfig signingConfigs.release 
        }
        debug {}
    }
   ...
    }

然后关注this

获得相关指纹后,将它们添加到 Google 或 Facebook 上,就像魅力一样

【讨论】:

  • 非常感谢 google map 和 facebook 现在运行良好,你是救生员@Hanzala
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2013-09-07
相关资源
最近更新 更多