我正在设置谷歌地图活动,我正在尝试获取我的API密钥.但是在我的cmd中我得到的错误是keytool不被识别为内部或外部命令....等....我尝试使用在类似问题中发布的解决方案,但它对我不起作用.
我的默认dubug密钥库
C:\Users\Sam\.android\debug.keystore
Run Code Online (Sandbox Code Playgroud) 我知道有很多其他人在忘记签名他们的apk时遇到INSTALL_PARSE_FAILED_NO_CERTIFICATES错误.这不是我所描述的问题.我将在几个步骤中详述我正在做的事情.
我有一个zipaligned,签名的apk文件(AndroidWorld.apk).我可以安装这个没问题.到现在为止还挺好.
接下来,我用apktool反编译apk.此外,到目前为止一切顺利.
之后,我使用asmdex来修改classes.dex文件并注入一些方法记录.此时,如果我要重新打包apk并尝试安装,它肯定会失败,因为classes.dex的签名不再匹配签名清单中的内容.我意识到了.所以我重新打包apk,zipalign它,然后用我自己的密钥库签名:
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore "android_new_sample.keystore" -storepass mypass "C:\apk\AndroidWorld-release.apk" asample
Signing with keystore android_sample.keystore alias asample
adding: META-INF/MANIFEST.MF
adding: META-INF/ASAMPLE.SF
adding: META-INF/ASAMPLE.RSA
signing: assets/x.js
signing: assets/x.css
signing: assets/special_offers.html
signing: res/layout/displayjourneylist.xml
signing: res/layout/journey_row.xml
signing: res/layout/login.xml
signing: res/layout/searchjourney.xml
signing: res/layout/settings.xml
signing: res/layout/webview.xml
signing: res/layout/window_title.xml
signing: res/menu/option_menu.xml
signing: AndroidManifest.xml
signing: resources.arsc
signing: res/drawable-hdpi/header.png
signing: res/drawable-hdpi/ic_launcher.png
signing: res/drawable-ldpi/header.png
signing: res/drawable-ldpi/ic_launcher.png
signing: res/drawable-mdpi/header.png
signing: res/drawable-mdpi/ic_launcher.png
signing: classes.dex
signing: assets/x-runtime.properties
1 file(s) copied.
Run Code Online (Sandbox Code Playgroud)
那里没有投诉,对吧?它看起来像classes.dex已签署,它没有抱怨.但是现在,如果我用jarsigner -verify检查签名apk的完整性,那就不开心了:
jarsigner.exe -verify -verbose -certs C:\apk\AndroidWorld-release-signed.apk …Run Code Online (Sandbox Code Playgroud) 目前我在登录发布模式后启动时遇到app崩溃问题,但在调试模式下它工作正常.
我现在无法弄清楚问题,即使我做了研究并继续寻找解决方案,但我还是没有设法让它起作用
当应用程序崩溃时,它不会显示在我的应用程序logcat中,但显示在" No Filter "中
错误是
java.lang.NoSuchFieldError: NO_ACTION
at java.lang.reflect.Method.getDefaultValue(Native Method)
at java.lang.reflect.Method.getDefaultValue(Method.java:353)
at libcore.reflect.AnnotationFactory.getElementsDescription(AnnotationFactory.java:75)
at libcore.reflect.AnnotationFactory.<init>(AnnotationFactory.java:112)
at libcore.reflect.AnnotationFactory.createAnnotation(AnnotationFactory.java:94)
at java.lang.reflect.Field.getAnnotation(Native Method)
at java.lang.reflect.Field.getAnnotation(Field.java:209)
at com.a.g.a(Unknown Source)
at com.a.b.a(Unknown Source)
at com.a.b.a(Unknown Source)
at com.a.b.onCreate(Unknown Source)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at com.a.h.c(Unknown Source)
at com.a.h.a(Unknown Source)
at com.a.a.a(Unknown Source)
at com.socialproperty.app.service.AppController.onCreate(Unknown Source)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
at com.lbe.security.service.core.client.b.x.callApplicationOnCreate(Unknown Source)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4361)
at android.app.ActivityThread.access$1500(ActivityThread.java:138)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1259)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5034)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:805)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621)
at …Run Code Online (Sandbox Code Playgroud) 我正在使用 javaKeyStore来存储用户安全信息并使用密码锁定(加密)密钥存储并在需要时使用密码检索信息,这工作正常。
但我不知道如何更改同一个 keyStore 文件的密码
我正在使用使用KeyStore.load(InputStream,Password)用户密码访问密钥库keyStore.store(Keystore,password)并将值写入密钥库的方法。
有没有办法更改keyStore文件的密码。我已经检查了此处提供的 api 文档:http : //docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html
我有一组应用程序,在将它们发布到商店之前,我总是对所有应用程序使用一个签名,即使我有用户名,我也碰巧忘记了密钥库密码。这是找回密码的有效方法吗?
我之前使用 App Inventor 2 创建 Android 应用程序,但最近我迁移到 Android Studio,但我已将使用 App Inventor 2 创建的应用程序上传到 Google Play Store,该应用程序的下载量超过 1000 次。现在我正在尝试使用 Android Studio 重新创建该应用程序,但我不想失去我的用户,所以我使用相同的项目名称和密钥库。
但问题是我已经从 App Inventor 2 下载了具有“.keystore”文件扩展名的密钥库文件,但我不知道如何将它导入到 Android Studio。
我也尝试过设置该文件的密钥库路径,但后来我对如何填写密钥库密码、密钥别名和密钥密码的字段感到困惑;因为我不知道这些。
android keystore app-inventor android-keystore android-studio
我正在按照本教程创建基于回合制的多人游戏:https://developers.google.com/games/services/console/enabling
在"指定客户端ID设置"部分下,他们说要运行:
keytool -list -keystore [path-to-debug-keystore]
这很好,因为他们也不在话下调试密钥库的位置:"在Windows中,调试密钥库可以位于C:\用户[用户名] .android\debug.keystore"
他们还说要运行这个命令:
keytool -list -keystore [path-to-production-keystore]
但他们没有提到发布/生产密钥库的位置.
...它在哪里?
我可以生成一个密钥并存储在 Android 密钥库中,如下所示:
private static final String AndroidKeyStore = "AndroidKeyStore";
private static final String AES_MODE = "AES/GCM/NoPadding";
keyStore = KeyStore.getInstance(AndroidKeyStore);
keyStore.load(null);
if (!keyStore.containsAlias(KEY_ALIAS)) {
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore);
keyGenerator.init(
new KeyGenParameterSpec.Builder(KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM) .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setRandomizedEncryptionRequired(false)
.build());
keyGenerator.generateKey();
}
Run Code Online (Sandbox Code Playgroud)
同样,我可以像这样检索它:
keyStore.getKey(KEY_ALIAS, null);
Run Code Online (Sandbox Code Playgroud)
我知道 getKey() 函数返回一个 Key 对象,但我还没有找到一种方法来显示密钥本身。它似乎没有 toString() 或 getBytes() 或类似的东西。
如何获取密钥的字节,或者至少打印出它的字符串版本?有可能吗?
我继承了一个应用程序,该应用程序调用受API密钥保护的服务,不幸的是该API密钥已嵌入该应用程序中。显然,这并不理想,因此我希望将API密钥嵌入Android Keystore中。我过去在其他Android应用程序上使用过https://github.com/scottyab/secure-preferences之类的库,但在这种情况下,安全性不会通过安全性审核。
阅读以下内容:https : //medium.com/@ericfu/securely-storing-secrets-in-an-android-application-501f030ae5a3我得到了所有东西,但是如何在最初的密钥库中获取API密钥作为构建的一部分。理想情况下,我会将API密钥作为登录过程的一部分返回,以便在运行时将其插入,但是不幸的是,我目前无法更改登录服务。
我已经阅读了许多文章,例如:在应用程序中存储和保护私有API密钥的最佳实践,但是大多数实践集中在将密钥保留在源代码存储库之外。
因此,问题是:是否有一个gradle构建机制(或任何机制)可以在构建时将特定的数据插入Android Keystore?
我在我的应用程序中使用 google drive api,当我使用 .apk 文件安装它时,它在调试和发布版本上都可以正常工作。
但是,如果我在 Playstore 上发布相同版本的 .apk,然后从那里下载它,我将无法登录 Google。
关于这个问题,我所能找到的只是人们没有使用发布密钥库在 Google 的开发人员控制台上生成凭据,而我的情况并非如此。
android google-drive-api android-keystore google-console-developer
android ×10
android-keystore ×10
keystore ×5
java ×3
app-inventor ×1
cmd ×1
encryption ×1
jar-signing ×1
key ×1
release-mode ×1