Android Studio 0.8.1
您好,
我使用snapzkeystore.bks
创建了一个名为keytool
的密钥库。我想获取路径,以便将其传递给函数并加载它。但是,我似乎无法走上正轨。我也尝试将它放在raw和assets文件夹中并尝试按照这种方式进行测试并测试哪些有效,但是,我还得到一个FileNotFoundException
调用此函数keyStoreFile.load(fileInputStream, password)
(下面的代码)
放入原始文件夹Test 1:
时尝试获取它String uri = "android.resource://" + getActivity().getPackageName() + "/" + R.raw.snapzkeystore;
snapClient.makeRequest(uri.toString());
我得到FileNotFoundException异常,并且字符串包含:
android.resource://com.sunsystem.snapzui/2131034112
我也尝试过使用assets文件夹并使用它代替Test 2:
Resources resources = getResources();
InputStream inputStream;
try {
inputStream = resources.getAssets().open("snapzkeystore.bks");
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(buffer);
byteArrayOutputStream.close();
inputStream.close();
Log.d(TAG, "asset: " + inputStream.toString());
snapClient.makeRequest(inputStream.toString());
} catch (IOException e) {
Log.d(TAG, "IOException: " + e.getMessage());
}
我得到FileNotFoundException异常,并且字符串包含:
android.content.res.AssetManager$AssetInputStream@5363f738
用于加载密钥库的源代码段:
public int makeRequest(String keyStoreFileName) {
try {
KeyStore keyStoreFile = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream fileInputStream = new FileInputStream(keyStoreFileName);
// FileNotFoundException
keyStoreFile.load(fileInputStream, password);
只是一个简单的问题,这是放置密钥库的最佳文件夹,raw
或assets
?
非常感谢任何建议
答案 0 :(得分:1)
我想获取路径,以便将其传递给函数并加载它。但是,我似乎无法获得路径
那是因为没有路径。那些不是文件。它们是APK文件中的条目。
我得到FileNotFoundException异常,并且字符串包含:
android.content.res.AssetManager$AssetInputStream@5363f738
这是因为您在toString()
返回的InputStream
上致电AssetManager
。
用于加载密钥库的源代码段
load()
需要InputStream
。您不必使用FileInputStream
。我们欢迎您将InputStream
的{{1}}传递给AssetManager
:
load()
只是一个简单的问题,这是将密钥库放入原始资产或资产的最佳文件夹?
要么应该没事。您可以使用KeyStore keyStoreFile = KeyStore.getInstance(KeyStore.getDefaultType());
keyStoreFile.load(resources.getAssets().open("snapzkeystore.bks"), password);
,IIRC上的openRawResource()
获取原始资源上的Resources
。