我正在尝试使用我的应用中的Facebook登录并想要个人资料数据。为此,我想以编程方式生成密钥,但它给了我错误。 我完成了here给出的所有其他事情但是所有这些事情对我来说都不起作用,而我想要生成密钥的代码却给了我错误。
我可以先成功登录(由keytool
命令生成的密钥),但之后显示无效的哈希密钥错误。
请帮助我如何摆脱这个。
我在MainApplication.java
粘贴的代码是
@Override
public void onCreate() {
super.onCreate();
AppEventsLogger.activateApp(this);
try {
PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(),PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
//SoLoader.init(this, /* native exopackage */ false);
}
并在控制台上显示错误
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:68: error: cannot find symbol
PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackage
Name(), PackageManager.GET_SIGNATURES);
^
symbol: class PackageInfo
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:68: error: cannot find symbol
PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackage
Name(), PackageManager.GET_SIGNATURES);
^
symbol: variable PackageManager
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:70: error: cannot find symbol
for (Signature signature : info.signatures) {
^
symbol: class Signature
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:71: error: cannot find symbol
MessageDigest md = MessageDigest.getInstance("SHA");
^
symbol: class MessageDigest
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:71: error: cannot find symbol
MessageDigest md = MessageDigest.getInstance("SHA");
^
symbol: variable MessageDigest
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:73: error: cannot find symbol
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
^
symbol: variable Base64
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:73: error: cannot find symbol
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
^
symbol: variable Base64
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:73: error: cannot find symbol
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
^
symbol: variable Log
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:75: error: cannot find symbol
} catch (NameNotFoundException e) {
^
symbol: class NameNotFoundException
location: class MainApplication
C:\Users\saket\pro\pro20\android\app\src\main\java\com\pro20\MainApplication.jav
a:77: error: cannot find symbol
} catch (NoSuchAlgorithmException e) {
^
symbol: class NoSuchAlgorithmException
location: class MainApplication
10 errors
:app:compileDebugJavaWithJavac FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
我出错了,请帮助我坚持下去。
答案 0 :(得分:0)
这个问题是用openssl不下载最新版本的。如果您有64位计算机,则必须download openssl-0.9.8e X64
而不是最新版本。
然后使用命令
生成密钥$ keytool -exportcert -alias androiddebugkey -keystore“C:\ Documents and Settings \ Administrator.android \ debug.keystore”| “C:\ OpenSSL \ bin \ openssl”sha1 -binary |“C:\ OpenSSL \ bin \ openssl”base64
它会要求输入密码“android”(不是其他)
现在它会起作用。