我认为很多开发者都在尝试了解更多有关Google I/O 2017上展示的新版Google Play App Signing功能的信息.
存储密钥库以在Google Play内部对应用进行签名的功能可以节省您安全存储密钥库的工作量,并可以帮助系统根据硬件和操作系统特性优化为每个设备提供的APK.
您可以在官方文档中阅读有关此主题的更多信息:https://developer.android.com/studio/publish/app-signing.html#google-play-app-signing.
通过以下答案,我将更好地解释您上传原始密钥库所需遵循的步骤以及如何创建新的上传密钥库,从此点开始您需要签署APK.
我尝试构建签名APK时收到此错误.我最近升级到API 23,但之后生成了APK:s.我糊涂了.寻求帮助并建议如何解决这个问题.这是错误
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:validateExternalOverrideSigning'.
> Keystore file /Users/me/Desktop/final apps/keystore.jks not
found for signing config 'externalOverride'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --
debug option to get more log output.
Run Code Online (Sandbox Code Playgroud)
和日志
Information:Gradle tasks [:app:assembleRelease]
:app:preBuild UP-TO-DATE
:app:preReleaseBuild UP-TO-DATE
:app:checkReleaseManifest
:app:preDebugBuild UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72311Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42311Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing810Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement810Library UP-TO-DATE
:app:prepareReleaseDependencies
:app:compileReleaseAidl UP-TO-DATE
:app:compileReleaseRenderscript UP-TO-DATE
:app:generateReleaseBuildConfig UP-TO-DATE
:app:generateReleaseAssets UP-TO-DATE
:app:mergeReleaseAssets …Run Code Online (Sandbox Code Playgroud) 我在Play商店创建了一个测试应用,以测试Google Play Signing功能.一旦我创建了测试应用程序并启用了该功能,我就可以访问"部署证书".我没有下载或以任何方式使用它.以下是我遵循的步骤:
keytool.exe -importcert -file upload.der -keystore
mykeystore.keystorekeytool.exe -list -keystore mykeystore.keystore.现在有两个别名,在步骤3中添加了一个新别名(名为mykey).它是可信证书类型.现在由于"受信任的证书条目没有密码保护",没有别名密码,Android Studio不允许我签署应用程序,当然我不能使用随机密码,因为它们"没有密码保护".如何使用它来签署我的apk以便将来更新?我错过了一些关键的东西,或者我的理解是不正确的?
按照https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-android 上的说明我使用 KeyTool 生成了开发签名哈希并在 Azure 门户中注册了我的应用程序。
门户生成了 MSAL 配置,然后我将其粘贴到项目中的 res.raw.auth_config.json 中(my-app-client-id 和 my-app 的包名称只是下面示例中的占位符;实际值是由自动生成的天蓝色):
{
"client_id" : "<my-app-client-id>",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "msauth://<my-app's package name>/npYKnQBHywGAasZflTy2xmdpEiU%3D",
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADMultipleOrgs",
"tenant_id": "organizations"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后我将以下内容添加到 AndroidManifest.xml:
<application>
[..]
<!--Intent filter to catch Microsoft's callback after Sign In-->
<activity
android:name="com.microsoft.identity.client.BrowserTabActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<!--
Add in your scheme/host from registered redirect URI
note that …Run Code Online (Sandbox Code Playgroud) 我正在开发一个.AAR安卓库,我想用自己的密钥签署已发布的工件,以便我可以确定是否已经发布了具有相同名称和功能的假aar.
通知1:
我希望能够以编程方式检查我的库的真实性,即使是伪造的库,也只是伪造我的aar文件的一部分功能.
通知2:
我不打算将这个aar发布到maven,sonatype或任何其他公共存储库中.因此,我将签署一个典型的发布流程,如签署apk文件.
在我的 Android 应用程序之一中,我尝试按照示例https://developers.google.com/identity/one-tap/android/get-saved-credentials#disable-one-tap包含一键登录身份验证。但是,这里https://developer.android.com/reference/androidx/activity/ComponentActivity#startActivityForResult(android.content.Intent,int)表示函数 startActivityForResult 已被弃用,并使用函数 registerForActivityResult 传入 StartActivityForResult ActivityResultContract 的对象。在其他示例的帮助下,我可以编写以下代码
public class MainActivity extends AppCompatActivity {
private SignInClient oneTapClient;
private BeginSignInRequest signInRequest;
private ActivityResultLauncher<Intent> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
// handle intent result here
if (result.getResultCode() == RESULT_OK) {
SignInCredential credential = null;
try {
credential = oneTapClient.getSignInCredentialFromIntent(result.getData());
String idToken = credential.getGoogleIdToken();
String username = credential.getId();
String password = credential.getPassword();
if (idToken != null) {
// Got an ID token from Google. Use it to …Run Code Online (Sandbox Code Playgroud) 我有一个使用jni库的项目.为此,我在我的gradle文件中有这个设置,根据他们的平台拆分apks(并且工作正常):
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.properties.put(signingConfig, signingConfigs.config)
output.versionCodeOverride =
versionCodes.get(output.getFilter(
com.android.build.OutputFile.ABI), 0) * 10000000 + android.defaultConfig.versionCode
}
}
splits {
abi {
enable true
reset()
include "armeabi", "armeabi-v7a", "arm64-v8a", "mips", "mips64", "x86", "x86_64"
universalApk true
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想设置一个签名配置,这样我就可以release直接从android studio 运行Build变量,所以我把它添加到我的gradle文件中:
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
signingConfigs {
config {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile rootProject.file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes …Run Code Online (Sandbox Code Playgroud) java-native-interface android android-gradle-plugin android-signing
例如,我有一个 gradle 构建,如下所示:
signingConfigs {
configFlavor1 {
keyAlias 'alias1'
keyPassword 'password1'
storeFile file('location1')
storePassword 'password1'
v1SigningEnabled true
v2SigningEnabled true
}
configFlavor2 {
keyAlias 'alias2'
keyPassword 'password2'
storeFile file('location2')
storePassword 'password2'
v1SigningEnabled true
v2SigningEnabled true
}
configFlavor3 {
keyAlias 'alias3'
keyPassword 'password3'
storeFile file('location3')
storePassword 'password3'
v1SigningEnabled true
v2SigningEnabled true
}
}
flavorDimensions "dimen1", "dimen2"
productFlavors {
flavor1 {
dimension "dimen1"
}
flavor2 {
dimension "dimen1"
}
testing {
dimension "dimen2"
}
dev {
dimension "dimen2"
}
prod {
dimension "dimen2" …Run Code Online (Sandbox Code Playgroud) android gradle android-productflavors android-flavordimension android-signing
环境:Windows 10 64 位,Android Studio 3.2 Canary 15。
我在一个测试项目中添加了免费和付费的风格,然后构建了签名的 APK。
运行发布版 APK 时出现以下错误 -
Installation failed with message Failed to finalize session :
INSTALL_PARSE_FAILED_NO_CERTIFICATES: Package
/data/app/vmdl2005941423.tmp/0_base-master has no certificates at entry
AndroidManifest.xml.
It is possible that this issue is resolved by uninstalling an existing
version of the apk if it is present, and then re-installing.
Run Code Online (Sandbox Code Playgroud)
我尝试使用 V1 和 V2 签名版本重新签署我的 APK,但在运行发布版本时仍然出现相同的错误。
在分析发布版 APK 后,AndroidManifest.xml 以红色显示 Manifest 标签的 xmlns:android :
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在红色文本上时,它会显示“URI 未注册...”
我不知道这是什么意思...
这个错误的原因是什么?
我在 build.gradle 中有:
android {
signingConfigs {
debug {
storeFile file("debug.keystore")
}
release {
try {
storeFile file("mykey.keystore")
storePassword "store_password"
keyAlias "myapp"
keyPassword "key_passowrd"
)
}
catch (ignored) {
throw new InvalidUserDataException("Something wrong")
}
}
}
buildTypes {
debug {
debuggable true
minifyEnabled false
versionNameSuffix '-DEBUG'
}
release {
debuggable false
minifyEnabled true
versionNameSuffix '-RELEASE'
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
Run Code Online (Sandbox Code Playgroud)
在构建变体中,我选择“发布”。然后,我在连接的设备上运行我的应用程序,但是,Android Studio 不断弹出对话框说:
但我确实有签名配置...
在构建输出中,我也没有看到 app-release.apk :
为什么我会收到错误消息?我的 Android Studio 版本是 3.0.1
我开发了android应用程序,当从此应用程序(带有Generate Signed APK)创建APk 并在其他设备上安装了该apk时未安装,并在手机上显示了此错误:未安装应用程序
我该如何解决?
我正在尝试对android / JNI进行一些性能分析。
如何生成用于测试的发行版本?
我知道这是有可能的,因为我已经成功生成了一个二进制文件并执行了它,而没有通过Android.mk文件进行任何签名,但是我正尝试移至android studio,并且它不会让我生成测试构建。在关键字段中输入垃圾似乎无效
这只是一个测试项目,目的是验证我能否获得所需的性能。它永远不会分发,也不会在我办公桌上的任何设备上运行。
我可以完全关闭所有代码验证功能吗?我现在正在进行验证,并且该项目的最终用途是非互联网连接的设备,该设备被视为黑盒设备。
android signing android-studio android-gradle-plugin android-signing
android ×12
android-signing ×12
apk ×2
google-play ×2
gradle ×2
aar ×1
build ×1
google-api ×1
java ×1
signing ×1