app 用 netty 进行网络请求,传输数据用 SSL 加密,nettysdk 初始化时需要读入 assets 里的 jks 文件。
结果发现打开 assets 目录只能在 Activity 里!在 Application 里不行,我 tm。。。
有什么别的解决方案吗?
app 用 netty 进行网络请求,传输数据用 SSL 加密,nettysdk 初始化时需要读入 assets 里的 jks 文件。
结果发现打开 assets 目录只能在 Activity 里!在 Application 里不行,我 tm。。。
有什么别的解决方案吗?
|
mouyaseMay 16, 2019 via Android
1
初始化的时候创建一个没有 ui 的 activity
|
|
pualMay 16, 2019 via Android
2
你直接内嵌到代码中啊
|
|
xiangyuecnMay 16, 2019
3
用 zip 读自身 apk 文件内容,不知道可不可行
|
|
qianji201712May 16, 2019
6
简单粗暴点,吧 jks 文件都成的 byte,放到一个类里面,当作一个 byte[] ,哈哈哈,这样就可以了
|
|
7
@qianji201712 你的意思是,把 jks 文件读成 byte[],再用 utf8 编码成字符串,再放在类里面?
|
|
stdnullMay 16, 2019 via Android
8
什么叫打开 assets 目录只能在 activity 里 ? 用 application 的 context 就能打开啊
|
|
cxtrinityyMay 16, 2019
9
context 直接 getAssets 就可以啊,我之前还做了后台从 assets 里解压数据库呢
|
|
10
@stdnull 不能,getAssets 的实现在 ContextThemeWrapper 里面,只能由 Activity 在 onCreate 之后可以打开。
|
|
yippeesMay 16, 2019
11
cpAts2Sd
|
|
yippeesMay 16, 2019
12
错了,快安全的应该还是内置代码··base64 吧
|
|
nxforceMay 16, 2019 via Android
13
都转成 base64,硬编码到 java 代码里,也可以弄到 so 里,通过 jni 读取。
|
|
qianji201712May 16, 2019
14
@gramyang 对的,他说白了就是一个二进制数据啊,放代码里面也一样的
|
|
ztaoberMay 16, 2019
15
为什么初始化一定要放在 application 里呢。。。
|
|
MoHen9May 16, 2019 via Android
16
其实放在 res/raw/下面也可以,一般不是都有个 splash 页面吗?
我都不知道 assets 目录不能在 application 中读取的问题,明天我去试试。 |
|
pualMay 16, 2019 via Android
17
证书文件内嵌到代码很正常的操作
|
|
james2013May 17, 2019 via Android
18
netty 代码包装成单例,延时初始化就可以实现,这样第一次网络请求才会初始化;
也可以直接放到启动 activity 中 |
|
20
@MoHen9 res/raw/和 asset 是一样的,都是通过 getResources 来读取的,所以都存在 application 里面不能读取的问题。
|
|
kwanzaaMay 17, 2019
21
你们这么喜欢在 Application.onCreate 里面办事嘛。。。
|
|
MoHen9May 17, 2019 via Android
22
@gramyang 可以读取,不管是 assets 还是 raw,使用 getAssets().open(“ xxx.jks ”)方法试试,还有,为什么用 Netty 呢?
|
|
cysionliuMay 17, 2019
23
....怀疑了一下咋会不行呢,花点时间敲个例子,说明 context 直接 getAssets 就可以,难道还有版本问题??
assets 里有个 hello.txt ,里面有行文字:hello asset 代码: public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); test(); } private void test() { Log.e("flag--", "run(MyApp.java)---->>" + Thread.currentThread().getName()); try { InputStream open = getAssets().open("hello.txt"); InputStreamReader reader = new InputStreamReader(open); BufferedReader bufferedReader = new BufferedReader(reader); Log.e("flag--", "run(MyApp.java)---->>" + bufferedReader.readLine()); } catch (IOException aE) { aE.printStackTrace(); } } } logcat: 2019-05-17 09:19:54.497 30636-30636/com.haibin.calendarviewproject E/flag--: run(MyApp.java)---->>main 2019-05-17 09:19:54.498 30636-30636/com.haibin.calendarviewproject E/flag--: run(MyApp.java)---->>hello asset |
|
olbbMay 17, 2019
24
试了下可以读啊 不知道楼主为啥读不了
|
|
kileMay 17, 2019
25
你为什么读不了??
完全不符合多年经验... 还跑去验证了下 |
|
luwiesMay 17, 2019
26
完全是可以读的
|
|
bkmiMay 17, 2019 via Android
27
别到处甩锅了,贴出你的代码来让大伙瞧瞧
|
|
28
@cysionliu 我也按照你的方法试了一下,在一个空白的 app 里面试了一下,确实可以读。但是我现在的 app 不能读。我这边有一个情况,我之前设定过 multiDexEnabled,最小版本是 21,然后又把 multiDexEnabled 取消了,但是又不提示方法是超过 64k 了。
会不会是这个原因呢? |
|
laoyurMay 17, 2019
29
> 留言说可以把 jks 文件持久化成字符串嵌入代码的方案行不通。用 base64 打出来的全是 A,用 String()打出来的是空白。
??? |
|
nicevarMay 17, 2019
30
楼主是个大坑,你们都听他瞎扯蛋。。。
|
|
nicevarMay 17, 2019
31
我猜测一下可能性,楼主可能启动了一个 remote 的 service,跨进程了,由于知识不足找不到问题所在
|
|
rb6221May 17, 2019
32
用 raw 啊 别用 assets
|
|
rigortekMay 17, 2019
33
show me you code
别在这瞎聊,让大家猜来猜去 |
|
hhhsuanMay 17, 2019 via Android
34
明明可以读,我一直都是这样做的。
|