Android assets 的大坑!

2019-05-16 19:30:35 +08:00
 gramyang

app 用 netty 进行网络请求,传输数据用 SSL 加密,nettysdk 初始化时需要读入 assets 里的 jks 文件。

结果发现打开 assets 目录只能在 Activity 里!在 Application 里不行,我 tm。。。

有什么别的解决方案吗?

6853 次点击
所在节点    Android
34 条回复
mouyase
2019-05-16 19:50:33 +08:00
初始化的时候创建一个没有 ui 的 activity
pual
2019-05-16 20:10:13 +08:00
你直接内嵌到代码中啊
xiangyuecn
2019-05-16 20:14:26 +08:00
用 zip 读自身 apk 文件内容,不知道可不可行
gramyang
2019-05-16 20:16:23 +08:00
@mouyase 研究了一下,activity 也是要执行完 onCreate 之后才能调用 getAssets()。看来也只能这样了。
gramyang
2019-05-16 20:20:06 +08:00
@pual 还能把 byte[]内嵌到代码中??
qianji201712
2019-05-16 20:29:03 +08:00
简单粗暴点,吧 jks 文件都成的 byte,放到一个类里面,当作一个 byte[] ,哈哈哈,这样就可以了
gramyang
2019-05-16 20:35:31 +08:00
@qianji201712 你的意思是,把 jks 文件读成 byte[],再用 utf8 编码成字符串,再放在类里面?
stdnull
2019-05-16 20:59:56 +08:00
什么叫打开 assets 目录只能在 activity 里 ? 用 application 的 context 就能打开啊
cxtrinityy
2019-05-16 21:12:20 +08:00
context 直接 getAssets 就可以啊,我之前还做了后台从 assets 里解压数据库呢
gramyang
2019-05-16 21:26:26 +08:00
@stdnull 不能,getAssets 的实现在 ContextThemeWrapper 里面,只能由 Activity 在 onCreate 之后可以打开。
yippees
2019-05-16 21:56:14 +08:00
cpAts2Sd
yippees
2019-05-16 22:03:30 +08:00
错了,快安全的应该还是内置代码··base64 吧
joyhub2140
2019-05-16 22:06:31 +08:00
都转成 base64,硬编码到 java 代码里,也可以弄到 so 里,通过 jni 读取。
qianji201712
2019-05-16 22:40:43 +08:00
@gramyang 对的,他说白了就是一个二进制数据啊,放代码里面也一样的
ztaober
2019-05-16 23:09:40 +08:00
为什么初始化一定要放在 application 里呢。。。
MoHen9
2019-05-16 23:47:14 +08:00
其实放在 res/raw/下面也可以,一般不是都有个 splash 页面吗?

我都不知道 assets 目录不能在 application 中读取的问题,明天我去试试。
pual
2019-05-16 23:54:59 +08:00
证书文件内嵌到代码很正常的操作
james2013
2019-05-17 00:18:44 +08:00
netty 代码包装成单例,延时初始化就可以实现,这样第一次网络请求才会初始化;
也可以直接放到启动 activity 中
gramyang
2019-05-17 06:46:28 +08:00
@MoHen9 这个可以有,我等会试试
gramyang
2019-05-17 08:24:46 +08:00
@MoHen9 res/raw/和 asset 是一样的,都是通过 getResources 来读取的,所以都存在 application 里面不能读取的问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/564828

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX