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包内的函数了。

相关内容

热门资讯

小学五年级作文博物馆21篇(... 小学五年级作文博物馆21篇 篇一:我的首次博物馆之旅今天,我们班级去了博物馆参观,这是我第一次去博物...
狼与狗的作文五年级【优秀6篇... 狼与狗的作文五年级篇一狼与狗是两种相似又不同的动物。狼是一种野生动物,而狗是人类驯化的宠物。它们在外...
孔雀五年级作文【精选6篇】 孔雀五年级作文 篇一我的宠物孔雀我有一只非常特别的宠物——孔雀。它拥有绚丽多彩的羽毛和优雅的姿态,每...
小学五年级母爱的作文400字... 小学五年级母爱的作文400字 篇一母爱的伟大在我们的成长过程中,母爱是我们最亲近的陪伴者。她们默默地...
小学五年级作文我多么快乐记叙... 小学五年级作文我多么快乐记叙文 篇一快乐的周末游玩周末终于来临了,我迫不及待地和爸爸妈妈一起计划着如...
午夜饭作文五年级13篇【精选... 午夜饭作文五年级13篇 篇一:午夜饭的美味与温暖午夜饭,是我小时候最喜欢的一餐。每当夜幕降临,家里的...
20年后的家乡五年级作文【精... 20年后的家乡五年级作文 篇一我热爱我的家乡,它是一个美丽的地方,有着清新的空气和绿色的大自然。在2...
牛奶五年级作文(精简6篇) 牛奶五年级作文 篇一牛奶是我们生活中常见的饮品,也是我们身体健康的重要来源之一。牛奶富含丰富的营养物...
小鸟的故事五年级作文(精选3... 小鸟的故事五年级作文 篇一小鸟的故事从古至今,小鸟一直是人们喜爱的动物之一。它们的形象可爱,羽毛绚丽...
20年后的家乡五年级作文50... 20年后的家乡五年级作文500字 篇一20年后的家乡五年级作文我来自一个美丽的小城市,这个城市有着悠...
小学五年级母爱的作文600字... 小学五年级母爱的作文600字 篇一母爱是世界上最伟大的力量,它无私无尽,给予我们无尽的温暖和关怀。在...
读书伴我成长五年级作文【通用... 读书伴我成长五年级作文 篇一随着时间的流逝,我已经是一个五年级的学生了。回想起这五年来,我发现读书对...
不给糖就捣蛋五年级作文(精简... 不给糖就捣蛋五年级作文 篇一今年的万圣节,我和几个好朋友一起决定去“不给糖就捣蛋”!我们精心准备了各...
五年级作文我喜欢的食物【通用... 五年级作文我喜欢的食物 篇一我喜欢的食物食物是人类生活中不可或缺的一部分,每个人都有自己喜欢的食物。...
小学五年级母爱的作文400字... 小学五年级母爱的作文400字 篇一母爱的伟大母爱是世界上最伟大的力量,她是无私的、无条件的。无论我们...
五年级优秀作文(优秀6篇) 五年级优秀作文 篇一我的暑假生活暑假来临了,我迫不及待地开始计划我的暑假生活。首先,我要利用这段时间...
快开学了的五年级作文(优秀5... 快开学了的五年级作文 篇一:新学期的期待新学期即将开始,我迫不及待地期待着迎接新的挑战和机会。虽然暑...
二十年后的家乡五年级作文(最... 二十年后的家乡五年级作文 篇一二十年后的家乡我想象着二十年后的家乡,一切都变得熟悉又陌生。家乡的面貌...
小学五年级母爱的作文600字... 小学五年级母爱的作文600字 篇一母爱是世界上最伟大的力量。她是一种无私奉献的爱,给了我生命,给了我...
我的一本书小学五年级作文(精... 我的一本书小学五年级作文 篇一我的一本书小学五年级作文我最喜欢的一本书是《小王子》。这本书是法国作家...