Android 动态调用SD卡内jar包
创始人
2024-06-01 05:04:34
0

背景:jar包不放在项目路径,而是放在SD卡目录内,需要动态调用jar包内函数实现自己的业务逻辑。

全部流程

  1. 新建一个项目用来打包jar。

打包jar

定义接口,规范函数

定义实现类,实现方法,并实现函数的业务逻辑,供其他项目调用,注意 JarLoader 类的包名,后面会重点提到。

  1. 打包jar包,修改 build.gradle

//Copy类型
task makeJar(type: Copy) {//删除存在的delete 'build/libs/myjar.jar'//设置拷贝的文件// from('build/intermediates/bundles/release/')from('build/intermediates/aar_main_jar/release/')//打进jar包后的文件目录into('build/libs/')//将classes.jar放入build/libs/目录下//include ,exclude参数来设置过滤//(我们只关心classes.jar这个文件)include('classes.jar')//重命名rename ('classes.jar', 'myjar.jar')
}makeJar.dependsOn(build)
//在终端执行生成JAR包
// gradlew makeJar

删除 MainActivity.class

执行打包命令:gradlew makeJar

打包完成

  1. 将my.jar 转为 mydex_jar.jar

将 my.jar 放在桌面文件夹中(自己随意放)

打开Android SDK,当前路径下打开 cmd,输入命令

dx --dex --output=mydex_jar.jar myjar.jar

记得将myjar.jar 路径替换,指定mydex_jar.jar输出路径

然后执行命令,得到Android 可以编译的 dex.jar

  1. 新建一个项目

将生成的 dex.jar 放在手机SD卡根目录。

将接口类 copy 过来,注意包名,和上面项目的包名一致,否则会报错类转换异常

新建一个 utils 类:LablePassUtils

package com.tky.phm.logic;import android.content.Context;
import android.os.Environment;
import android.util.Log;import com.tky.phm.VApp;
import com.vondear.rxtool.RxFileTool;import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.List;import dalvik.system.DexClassLoader;public class LablePassUtils {/*** 包名固定,类名固定* 方法名有接口实现*///https://www.freesion.com/article/8916963104/public static void getPass(Context context) {//拿到jar文件String sdCardPath = RxFileTool.getSDCardPath();List files = RxFileTool.listFilesInDir(sdCardPath, false);File path = new File(sdCardPath + File.separator + "mydex_jar.jar");///storage/emulated/0/mydex_jar.jarDexClassLoader cl = new DexClassLoader(path.getAbsolutePath(), context.getFilesDir().getAbsolutePath(),context.getFilesDir().getAbsolutePath(), context.getClassLoader());Class myClass = null;try {// 载入JarLoader类, 并且通过反射构建JarLoader对象, 然后调用sayHi方法myClass = cl.loadClass("com.tky.phm.logic.JarLoader");  //这里要用类的完整名称ILoader loader = (ILoader) myClass.newInstance();//因为我们这里也有接口文件,所有就能直接点出方法来String hellow = loader.creatPass("1111");Log.e("hellow", hellow);
//            Toast.makeText(MainActivity.this, hellow + ",计算结果=" + result, Toast.LENGTH_SHORT).show();} catch (Exception exception) {exception.printStackTrace();}}
}

这样就能调用到SD卡内的 jar包内的函数了。

相关内容

热门资讯

最新婚礼誓言主持词 最新婚礼誓言主持词(通用7篇)  根据活动对象的不同,需要设置不同的主持词。在各种集会、活动不断增多...
爷爷70大寿宴会主持词 爷爷70大寿宴会主持词尊敬的各位佳宾,亲爱的各位朋友,女士们,先生们:  中午好!  亲爱的朋友们,...
开幕主持词 开幕主持词  主持词已成为各种演出活动和集会中不可或缺的一部分。我们眼下的社会,各种场合可能都需要主...
文明班会的主持词 文明班会的主持词  男:说到文明礼仪,我们再熟悉不过了。  女:是啊,从生下来父母的教育,从入学后老...
广场舞比赛主持词 广场舞比赛主持词  主持词是在晚会、联欢会等大型联欢活动中,主持人把前后节目,把整台节目恰到好处地联...
中秋创意主持词 中秋创意主持词  主持词是主持人在节目进行过程中用于串联节目的串联词。在如今这个中国,主持词与我们不...
年终总结大会的主持词 年终总结大会的主持词(精选8篇)  主持词的写作需要将主题贯穿于所有节目之中。在当下的社会中,我们对...
开工仪式主持词 【必备】开工仪式主持词四篇  活动对象的不同,主持词的写作风格也会大不一样。在现在的社会生活中,各种...
幼儿园秋季运动会园长主持词 幼儿园秋季运动会园长主持词  主持词是主持人在台上表演的灵魂之所在。在人们积极参与各种活动的今天,主...
元旦联欢会主持词 元旦联欢会主持词  主持人在台上表演的灵魂就表现在主持词中。在当今社会生活中,各种场合中活跃现场气氛...
国庆节联欢会主持词 国庆节联欢会主持词  契合现场环境的主持词能给集会带来双倍的效果。在人们积极参与各种活动的今天,主持...
圣诞晚会主持词:结束语(中英...   F: Because of gathering together , having let us...
元旦晚会的致辞 元旦晚会的致辞(精选12篇)  在平时的学习、工作或生活中,大家肯定对各类致辞都很熟悉吧,致辞是指在...
欢聚一堂的主持词 欢聚一堂的主持词  主持词要根据活动对象的不同去设置不同的主持词。在当下这个社会中,主持人的需求越来...
在中学励志报告会上的主持词 在中学励志报告会上的主持词   在人们越来越注重自身素养的今天,报告不再是罕见的东西,我们在写报告的...
惊鸿舞主持词 惊鸿舞主持词汇总  1、《Lightspeed》  男:青春,是阳光下初融的冰雪,叮咚叮咚奏响着奇幻...
主持人串词等 主持人串词等五篇  第一篇:《新款文艺汇演主持人串词》  2014年文艺汇演主持人串词  男1、女1...
初中毕业典礼主持词开场白 初中毕业典礼主持词开场白  时光弹指一挥间悄然而逝,在这个栀子花开的季节,初中学生即将毕业,初中毕业...