(二)Android 打包 so文件到jar包

我们经常需要向客户提供开发用的jar包和so文件,那么能不能将二者打包在一起呢,答案是可以。

首先我们需要将资源文件(包括so文件、配置文件以及其他资源等)放入assets文件夹下,然后在代码中,将他们复制到指定路径,并手动加载对应的so文件。

我的资源文件树结构如下:

详细的代码如下:

 1     public static boolean init(Context mContext)
 2     {
 3         initAssetsFile(mContext,"armeabi");
 4         System.load(mContext.getFilesDir() + "/armeabi/"+"libjypri.so");
 5         System.load(mContext.getFilesDir() + "/armeabi/"+"libwltdecode.so");
 6
 7         initAssetsFile(mContext, "wltlib");
 8         if (0 == IDCReaderSDK.wltInit(mContext.getFilesDir() + "/wltlib")) {
 9             Log.e(TAG, "wltInit success");
10             return true;
11         } else {
12             Log.e(TAG, "wltInit failed");
13             return false;
14         }
15     }
16
17     private static void initAssetsFile(Context context,String dir)
18     {
19         Log.e(TAG, "initAssetsFile");
20
21         boolean needCopy = false;
22
23         // 创建data/data目录
24         File file = context.getFilesDir();
25         String path = file.toString() + "/"+dir+"/";
26
27         // 遍历assets目录下所有的文件,是否在data/data目录下都已经存在
28         try {
29             String[] fileNames = context.getAssets().list(dir);
30             for (int i = 0; fileNames != null && i < fileNames.length; i++) {
31                 if (!new File(path + fileNames[i]).exists()) {
32                     needCopy = true;
33                     break;
34                 }
35             }
36
37         } catch (IOException e) {
38             e.printStackTrace();
39         }
40
41         if (needCopy) {
42             copyFilesFassets(context, dir, path);
43         }
44     }
45
46     //将旧目录中的文件全部复制到新目录
47     private static void copyFilesFassets(Context context, String oldPath, String newPath) {
48
49         Log.e("copyFilesFassets", oldPath+" -> "+newPath);
50         try {
51
52             // 获取assets目录下的所有文件及目录名
53             String fileNames[] = context.getAssets().list(oldPath);
54
55             // 如果是目录名,则将重复调用方法递归地将所有文件
56             if (fileNames.length > 0) {
57                 File file = new File(newPath);
58                 file.mkdirs();
59                 for (String fileName : fileNames) {
60                     copyFilesFassets(context, oldPath + "/" + fileName, newPath + "/" + fileName);
61                 }
62             }
63             // 如果是文件,则循环从输入流读取字节写入
64             else {
65                 InputStream is = context.getAssets().open(oldPath);
66                 FileOutputStream fos = new FileOutputStream(new File(newPath));
67                 byte[] buffer = new byte[1024];
68                 int byteCount = 0;
69                 while ((byteCount = is.read(buffer)) != -1) {
70                     fos.write(buffer, 0, byteCount);
71                 }
72                 fos.flush();
73                 is.close();
74                 fos.close();
75             }
76         } catch (Exception e) {
77             // TODO Auto-generated catch block
78             e.printStackTrace();
79         }
80     }
时间: 2024-08-03 21:35:34

(二)Android 打包 so文件到jar包的相关文章

Android 混淆打包不混淆第三方jar包

项目因为要发布,所以要混淆打包. 混淆打包流程: 1.在proguard-project.txt文件中添加不需要混淆的类和第三方的jar包 这个是保持自己包中不需要混淆的类,如果有些类调用了jni也不需要混淆,不然会出错.还有如果项目中有其他项目作为library引入,那这些项目的一些类也不能混淆. 这个是保持项目中的第三方jar不混淆 另外加上上面几句话,不然会在控制台中报warning警告 2.在project.properties文件中把proguard.config=${sdk.dir}

android studio 使用gradle 导出jar包,并打包assets目录

最近项目在做一个sdk,供别的开发者使用,所以要求导出jar包. 与eclipse不同,android studio 1.0 没提供导出jar包的图形界面.需要结合gradle来生成jar包. 首先 需要设置module应用的gradle插件为 library 代码长这样: ? 1 <code class="hljs">apply plugin: 'com.android.library'</code> 这样,build的时候,android studio 1.

android-将.java文件转换为jar包(八)

今天碰到将C++封装的接口转换为java代码,生成的java文件是.java的,需要将其打包为jar的库文件. 一.新建java工程,将所有的.java文件拷贝到新建package下 二.将其导出为jar包 一步步向导就可完成.

Ant打包可运行的Jar包(加入第三方jar包)

本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.alfred.main; import com.alfred.bean.User; import com.alfred.util.ProjConfig; import com.thoughtworks.xstream.XStream; public class Main { public static

maven工程打包成runnable的jar包,拷贝资源和依赖jar包

eclipse下新建maven工程,生成runnable的jar包.之前一直是手动拷贝依赖的jar包和资源文件,烦得要死.上网可劲查了一下.解决方案如下. 在pom的配置文件中做如下配置: <build> <finalName>...</finalName> <sourceDirectory>src/main/java</sourceDirectory> <resources> <!-- 控制资源文件的拷贝 --> <

spring maven项目打包为可执行jar包

用assembly打包一直报错: shangyanshuodeMacBook-Pro:target shangyanshuo$ java -jar jobscrawler-1.0-SNAPSHOT-jar-with-dependencies.jar 17-04-30 15:52:43,337 INFO org.springframework.context.support.ClassPathXmlApplicationContext(AbstractApplicationContext.java

2017.5.1 使用fat jar插件来打包有引用外部jar包的项目

如果在程序开发时用到了第三方提供的API.jar包或者其他附属资源.在导出并生成项目的jar文件时,必须将第三方的文件一并导出,否则无法正确运行. 可以使用fat jar插件,下载地址:http://sourceforge.net/projects/fjep/ 1.下载 下载完成后,解压至文件夹,结构如图: 2.安装 (1)将plugin下的jar包放到eclipse的plugin下,重启eclipse. (2)重启后,windows->preferences,如果有fat jar,表示安装成功

jar命令打包与java执行jar包

JAR命令详解 jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 - 其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示: -c 创建新的 JAR 文件包 -t 列出 JAR 文件包的内容列表 -x 展开 JAR 文件包的指定文件或者所有文件 -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中) [vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参

Springboot中IDE支持两种打包方式,即jar包和war包

Springboot中IDE支持两种打包方式,即jar包和war包 打包之前修改pom.xml中的packaging节点,改为jar或者war    在项目的根目录执行maven 命令clean package -Dmaven.test.skip=true,即可打包,如下 命令执行成功后,在target目录下即可看到打包好的文件 提示:若打的包为jar包,可通过java -jar guns-xxx.jar来启动Guns系统 原文地址:https://www.cnblogs.com/mracale