Android assets 的大坑!

2019 年 5 月 16 日
 gramyang

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

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

有什么别的解决方案吗?

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

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

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

https://study.congcong.us/t/564828

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

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

© 2021 V2EX