android JNI开发C++代码对assets文件的访问

本文介绍了两种在Android JNI中访问assets文件的方法:一是通过复制到sdcard并提供绝对路径;二是利用C层获取AAssetManager指针直接读取。详细讲述了实现过程及所需函数。
摘要由CSDN通过智能技术生成

Android应用往往会有很多资源文件需要使用,这些资源文件一般会放在assets目录编进apk中,当apk中使用了so库的时候,由于编进apk的资源文件没有固定的目录,因此不能在C层通过设置路径的方式读取;这里提供两种C层读取资源文件的方式,仅供参考。
# 方法一(通过绝对路径访问)
由于在apk的安装过程中assets中的文件并没有从apk包中解压出来,所以在JNI的C++代码中不能按照原始的路径直接进行访问,一种常用的方法为将assets中的文件复制到sdcard的目录下,然后传递绝对路径给JNI中的C++代码中进行访问。
#### 将assets中的文件复制到sdcard的目录下 工具类

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

```

package com.zili.rtk.activity;

/**

* copy the files and folders of assets to sdCard to ensure that we can read files in JNI part

* @AuThor Qinghao Hu

* @date   2015/9/22

* @version 1.0

* @Email [email]qinghao.hu@nlpr.ia.ac.cn[/email]

*/

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import android.content.Context;

import android.content.res.AssetManager;

import android.util.Log;

public class AssetCopyer {

    private static String TAG="AssetCopyer";

    /**

     * copy all the files and folders to the destination

     * @Param context  application context

     * @param destination the destination path

     */

    public  static void copyAllAssets(Context context,String destination)

    {

        copyAssetsToDst(context,&

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值