是否可以在 Android Studio 中本地调试 Google Play 的应用内结算?
Is it possible to debug locally Google Play's in-app billing in Android Studio?
我在本地测试应用内订阅产品时遇到此错误。
authentication is required. you need to sign in to your google account
我可以查看产品的库存,但我不应该也可以购买吗?
有许多 post 关于为什么会出现此错误的原因,我认为已解决:
- 该产品在启用应用内结算的 Beta 频道中发布
- 我使用设备上的测试用户许可帐户登录 Play 商店。
是通过 beta/alpha 渠道测试实际购买的唯一方法 - 而不是直接来自 android 工作室。这 post 表明这是可能的(见屏幕截图)
http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-test
我假设,当您初始化 'billing helper' 时,您会从开发人员控制台为其提供一个 Base64 public 密钥。该密钥对应于您的发布证书。
您收到的消息表明,您可能正在尝试 运行 您的应用处于调试模式。这意味着,您的应用程序是使用调试证书(默认证书)签名的。如果我是对的,那就解释了为什么你没有通过身份验证。
不幸的是,测试应用内结算的唯一方法是在使用发布证书签名的应用中,在登录到帐户的设备上,定义为 'Gmail accounts with testing access' 并且您的应用有将发布到 Google Play (alpha/beta/production).
编辑:现在已被新接受的答案取代。
本质上,应用内结算支付只能使用发布签名的 apk(我们上传到 Google Play 控制台的 apk)进行测试。
以下是让我附加到带有 Android Studio
的已签名 apk 的一些步骤:
我在 Windows。它有助于在 PATH 中加入 adb.exe
,对我来说是:
C:\Users{your-username}\AppData\Local\Android\sdk\platform-tools
- 在 Google Play Console 中,确保该应用已在 Alpha 或 Beta 渠道中发布(<是初始处理后的一次性手动步骤)并且您拥有一个许可的测试 gmail 帐户(来自“帐户设置”部分),该帐户也在 alpha/beta 测试人员列表中并且不是应用程序帐户的所有者。此帐户是设备上的唯一帐户。发布 apk 并确保它可以从 Play 商店安装的版本运行。
- 有这些设置:
在
AndroidManifest.xml
下application
节点
android:debuggable="true"
tools:ignore="HardcodedDebugMode"
注意:
Propably,您需要添加: xmlns:tools="http://schemas.android.com/tools"
属性 到您的清单标签。它可能看起来像:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package"
xmlns:tools="http://schemas.android.com/tools">
并在 build.gradle
文件中的 android > buildTypes > release
下,添加:
debuggable true
从 Android Studio
生成签名的 APK
连接您的设备以进行 USB 调试。删除当前安装:
adb uninstall {yourdomain}.{yourpackagename}
- 安装它(从发布路径)
adb install app-release.apk
- 打开设备上的应用程序。在 Android Studio 的
Run
菜单中,最后一个选项是“将调试器附加到 Android 进程”- select 您的设备。您现在正在调试。
注意 对于应用内结算,内部版本号需要与当前在 Play 商店中发布的版本相匹配
也许另一种方法:
在大多数方面与此处提到的类似,只是您只需在调试 buildType 中指向您的发布密钥库。
具体步骤:
1) 在你的应用 Gradle 文件中的 android
标签中添加一个发布签名配置:
signingConfigs {
release {
storeFile file("Path_to_your_Production_release_Keystore.jks")
storePassword 'your_keystore_password'
keyAlias 'your_key_alias'
keyPassword 'your_key_password'
}
}
并将签名配置添加到您的调试 buildType:
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt', 'proguard-google-api-client.txt'
}
debug {
signingConfig signingConfigs.release
debuggable true
}
}
2) 确保您的应用 gradle > defaultConfig
部分中的 versionCode
和 versionName
与您上传到 Play 商店的 apk 中的内容完全匹配:
defaultConfig {
applicationId "com.groovypackagename.groovyapp"
minSdkVersion 16
targetSdkVersion 24
versionCode 56
versionName "0.9.6"
multiDexEnabled true
resConfigs "en"
}
3) 确保将计费权限添加到您的清单中:
<uses-permission android:name="com.android.vending.BILLING" />
4) 不要忘记根据文档添加您的 IAB(应用内结算)产品
5) 按照常规设置断点和调试。
6) 成功破解代码后,不要忘记至少清理 gradle 文件中的更改,例如删除签名配置,这样您的 kestore 密码就不会四处飘荡在 space.
运气好的话,您将能够对 IAB 代码进行本地调试。
干杯。
以下内容对我从 IDE(Android Studio)
启动
1) 转到您的 https://play.google.com/apps/publish/
'Developer' Account/Settings/Account details/License 测试中
2) 添加与您正在测试的设备相对应的 'Default Google Play' 电子邮件地址
来源:https://engineering.memrise.com/faster-in-app-billing-subscriptions-testing-8e68551b4e2f
是的,刚刚试过了,效果很好,我认为它可以帮助别人节省时间。
一旦你上传了你的应用程序进行封闭测试,然后你就进行了更改,再次上传是一项繁琐的工作。在对这种重复感到沮丧之后,我在 official documentation
下找到了这个
Ordinarily, the Google Play Billing Library is blocked for apps that aren't signed and uploaded to Google Play. License testers can bypass this check, meaning you can sideload apps for testing, even for apps using debug builds with debug signatures without the need to upload to the new version of your app. Note that the package name must match that of the app that is configured for Google Play, and the Google account must be a license tester for the Google Play Console account.
因此,作为 alpha 测试的结果,我有一个电子邮件帐户列表添加为测试人员和许可。我 运行 具有相同版本密钥库的代码和计费方式与 alpha 测试完全相同。
只需确保在新 Play 管理中心.
中添加用于许可的测试电子邮件
取决于您的应用内结算的用例,但请确保设置购买项目
我在本地测试应用内订阅产品时遇到此错误。
authentication is required. you need to sign in to your google account
我可以查看产品的库存,但我不应该也可以购买吗?
有许多 post 关于为什么会出现此错误的原因,我认为已解决:
- 该产品在启用应用内结算的 Beta 频道中发布
- 我使用设备上的测试用户许可帐户登录 Play 商店。
是通过 beta/alpha 渠道测试实际购买的唯一方法 - 而不是直接来自 android 工作室。这 post 表明这是可能的(见屏幕截图)
http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-test
我假设,当您初始化 'billing helper' 时,您会从开发人员控制台为其提供一个 Base64 public 密钥。该密钥对应于您的发布证书。
您收到的消息表明,您可能正在尝试 运行 您的应用处于调试模式。这意味着,您的应用程序是使用调试证书(默认证书)签名的。如果我是对的,那就解释了为什么你没有通过身份验证。
不幸的是,测试应用内结算的唯一方法是在使用发布证书签名的应用中,在登录到帐户的设备上,定义为 'Gmail accounts with testing access' 并且您的应用有将发布到 Google Play (alpha/beta/production).
编辑:现在已被新接受的答案取代。
本质上,应用内结算支付只能使用发布签名的 apk(我们上传到 Google Play 控制台的 apk)进行测试。
以下是让我附加到带有 Android Studio
的已签名 apk 的一些步骤:
我在 Windows。它有助于在 PATH 中加入 adb.exe
,对我来说是:
C:\Users{your-username}\AppData\Local\Android\sdk\platform-tools
- 在 Google Play Console 中,确保该应用已在 Alpha 或 Beta 渠道中发布(<是初始处理后的一次性手动步骤)并且您拥有一个许可的测试 gmail 帐户(来自“帐户设置”部分),该帐户也在 alpha/beta 测试人员列表中并且不是应用程序帐户的所有者。此帐户是设备上的唯一帐户。发布 apk 并确保它可以从 Play 商店安装的版本运行。
- 有这些设置:
在
AndroidManifest.xml
下application
节点
android:debuggable="true" tools:ignore="HardcodedDebugMode"
注意:
Propably,您需要添加: xmlns:tools="http://schemas.android.com/tools"
属性 到您的清单标签。它可能看起来像:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package"
xmlns:tools="http://schemas.android.com/tools">
并在 build.gradle
文件中的 android > buildTypes > release
下,添加:
debuggable true
从 Android Studio
生成签名的 APK连接您的设备以进行 USB 调试。删除当前安装:
adb uninstall {yourdomain}.{yourpackagename}
- 安装它(从发布路径)
adb install app-release.apk
- 打开设备上的应用程序。在 Android Studio 的
Run
菜单中,最后一个选项是“将调试器附加到 Android 进程”- select 您的设备。您现在正在调试。
注意 对于应用内结算,内部版本号需要与当前在 Play 商店中发布的版本相匹配
也许另一种方法:
在大多数方面与此处提到的类似,只是您只需在调试 buildType 中指向您的发布密钥库。
具体步骤:
1) 在你的应用 Gradle 文件中的 android
标签中添加一个发布签名配置:
signingConfigs {
release {
storeFile file("Path_to_your_Production_release_Keystore.jks")
storePassword 'your_keystore_password'
keyAlias 'your_key_alias'
keyPassword 'your_key_password'
}
}
并将签名配置添加到您的调试 buildType:
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt', 'proguard-google-api-client.txt'
}
debug {
signingConfig signingConfigs.release
debuggable true
}
}
2) 确保您的应用 gradle > defaultConfig
部分中的 versionCode
和 versionName
与您上传到 Play 商店的 apk 中的内容完全匹配:
defaultConfig {
applicationId "com.groovypackagename.groovyapp"
minSdkVersion 16
targetSdkVersion 24
versionCode 56
versionName "0.9.6"
multiDexEnabled true
resConfigs "en"
}
3) 确保将计费权限添加到您的清单中:
<uses-permission android:name="com.android.vending.BILLING" />
4) 不要忘记根据文档添加您的 IAB(应用内结算)产品
5) 按照常规设置断点和调试。
6) 成功破解代码后,不要忘记至少清理 gradle 文件中的更改,例如删除签名配置,这样您的 kestore 密码就不会四处飘荡在 space.
运气好的话,您将能够对 IAB 代码进行本地调试。
干杯。
以下内容对我从 IDE(Android Studio)
启动1) 转到您的 https://play.google.com/apps/publish/ 'Developer' Account/Settings/Account details/License 测试中
2) 添加与您正在测试的设备相对应的 'Default Google Play' 电子邮件地址
来源:https://engineering.memrise.com/faster-in-app-billing-subscriptions-testing-8e68551b4e2f
是的,刚刚试过了,效果很好,我认为它可以帮助别人节省时间。
一旦你上传了你的应用程序进行封闭测试,然后你就进行了更改,再次上传是一项繁琐的工作。在对这种重复感到沮丧之后,我在 official documentation
下找到了这个Ordinarily, the Google Play Billing Library is blocked for apps that aren't signed and uploaded to Google Play. License testers can bypass this check, meaning you can sideload apps for testing, even for apps using debug builds with debug signatures without the need to upload to the new version of your app. Note that the package name must match that of the app that is configured for Google Play, and the Google account must be a license tester for the Google Play Console account.
因此,作为 alpha 测试的结果,我有一个电子邮件帐户列表添加为测试人员和许可。我 运行 具有相同版本密钥库的代码和计费方式与 alpha 测试完全相同。
只需确保在新 Play 管理中心.
中添加用于许可的测试电子邮件取决于您的应用内结算的用例,但请确保设置购买项目