当前位置: 首页 > news >正文

漯河市网站建设网站建设推广专家服务

漯河市网站建设,网站建设推广专家服务,wordpress周期,奶茶店面设计什么时候需要用到动态加载jar包呢? 减少apk本身大小,某些界面才需要用jar里的功能jar中的功能可以独立开发,不要依赖其它的东西,能适用各个项目和第三方公司合作,人家不提供项目源码给你,但又要开发他们使…

什么时候需要用到动态加载jar包呢?

  1. 减少apk本身大小,某些界面才需要用jar里的功能
  2. jar中的功能可以独立开发,不要依赖其它的东西,能适用各个项目
  3. 和第三方公司合作,人家不提供项目源码给你,但又要开发他们使用的某些应用场景

实现步骤:

1. 编写jar的代码

新建一个service module,编写以下代码

public interface  AbstractAction {/*** 开始* @param c*/void start(Context c);/*** 停止*/void stop();
}public class MainAction implements AbstractAction {@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overridepublic void start(Context c) {TaskManager.getInstance().start(c);}@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overridepublic void stop() {TaskManager.getInstance().stop();}
}public class TaskManager {private volatile static TaskManager instance = null;private boolean isRun = true;private TaskManager() {}public static TaskManager getInstance() {if (instance == null) {synchronized (TaskManager.class) {if (instance == null) {instance = new TaskManager();}}}return instance;}/*** 初始化** @param context*/public void start(Context context) {// 做自己想做的事new Thread() {@Overridepublic void run() {while (isRun)Log.i("xian", " 执行任务中... ");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}.start();}public void stop() {isRun = false;}}

2. 将代码打包并jar转换为 android 可以使用的jar(dex)包

由于android不能直接像java程序那样直接引用jar包, 需要转换dex才行

1. 在module中的 build.gradle 文件中,加入以下代码,生成jar包。输出路径为
task makeJar(type: Copy) {//删除已经存在的 jardelete 'build/libs/test-java.jar'//设置拷贝的文件from('build/intermediates/aar_main_jar/release/')//打进jar包后的文件目录into('build/libs/')include('classes.jar')//重命名rename ('classes.jar', 'test-java.jar')
}makeJar.dependsOn(build)

在这里插入图片描述

2.执行makeJar Task, 一种是点击 task makeJar(tyoe.Copy)前面的绿色小三角运行,另外一种可以打开gardle,然后找到 service --> other --> makeJar 运行

在这里插入图片描述

在这里插入图片描述

3.运行完后,就会在 serice/ --> build --> lib下生成 test-java.jar

4. 使用android sdk --> build-tools --> 30.0.2(任意一个版本) --> dx 配置为环境变量 (如果觉得此操作麻烦,可以使用步骤5的方法)

在这里插入图片描述
windows 的电脑, 右击 我的电脑 --> 属性 --> 高级系统设置 --> path --> 添加 dx的路径 --> 保存
在这里插入图片描述

5. 如果不想配置环境变量,可以win+R --> cmd 打开控制台, 输入 D:\Android\Sdk\build-tools\30.0.2(我的sdk存放的路径),然后 D: 回车, 切换到D盘路径,如下图:

在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/d5d4b1c6797741d18c1453389be2caa5.png

在这里插入图片描述

6.将步骤3生成好的test-java.jar 包,拷贝到桌面,如果配置了环境变量可以直接使用dx命令,没有配置的话,就进入 sdk目录中的dx所在的目录,执行dx命令。 执行完命令后,就可以生成Android 可以调用的 test.jar 了
dx --dex --output=C:\Users\dell\Desktop\test.jar C:\Users\dell\Desktop\test-java.jar

在这里插入图片描述

3. 动态调用jar包

将成功后 test.jar 拷贝到手机的目录中,然后在项目中调用jar ,如果看到执行任务中… 就证明调用成功。

 /***  使用dexClassLoader 动态加载test.jar,然后通过反射调用方法即可** @param view*/fun loadJar(view: View) {if (!PermissionUtils.checkPermission(this)) {Toast.makeText(this,"没有文件读写权限",Toast.LENGTH_LONG).show()//跳转到设置权限界面PermissionUtils.requestAppUsagePermission(this);return}val pluginPath = File(getExternalFilesDir(null)?.absolutePath + "/test.jar")Log.i("xian","jar 包存放路径: ${pluginPath}")val dataFile: String = codeCacheDir.absolutePathtry {val classLoader =DexClassLoader(pluginPath.absolutePath, dataFile, null, javaClass.classLoader)val mainActionClass = classLoader.loadClass("com.xian.service.main.MainAction");val mainAction = mainActionClass.newInstance()//开始执行mainActionClass.getDeclaredMethod("start", Context::class.java).invoke(mainAction, this)}catch (e:Throwable){// 路径记得放对 ,否则会报  ClassLoader referenced unknown pathe.printStackTrace()}}

注意: 1. 申请读写权限 2.test.jar的存放路径
在这里插入图片描述
在这里插入图片描述

4. 源码

https://download.csdn.net/download/u012121105/87522731

http://www.khdw.cn/news/43818.html

相关文章:

  • 工厂招聘信息厦门seo推广外包
  • 企业网站推广阶段百度账号出售平台
  • 网站布局建设企业推广是什么意思
  • 北京网站制作建设公司做网络优化哪家公司比较好
  • 网站标题怎么设置公关公司提供的服务有哪些
  • 棠下手机网站建设百度网站推广怎么做
  • 微信开发者工具简介seo联盟
  • 中小企业网站建设 论文怎么推广网站链接
  • 太仓家政保洁公司郑州seo顾问外包
  • 做暧小视频免费视频在线观看网站做企业推广的公司
  • 传奇单职业手机版苏州seo网络推广
  • 品牌网站开发优秀网站
  • 如何网络推广优化商丘seo优化
  • 房产网站电商怎么做站长工具seo综合查询降级
  • 在线教育 网站开发功能需求怎么引流怎么推广自己的产品
  • web免费网站大全下载体验式营销
  • 网站微信建设运维培训班网站模板
  • 哈尔滨专业网站制作设计销售怎么找客户源
  • 公安用什么系统做网站企业网站免费制作
  • 盗取dede系统做的网站模板新闻头条新闻
  • 如何做网站的长沙好的seo外包公司
  • 网站开发 视频存在哪新闻10条摘抄大全
  • 怎么提高百度搜索排名百度搜索引擎优化案例
  • 上饶哪里做网站seozhun
  • 程序员外包网站品牌推广内容
  • 计算机考试模拟网站怎么做seo平台是什么
  • 做网站 客户大概会有那些问题湖北网站设计
  • 登录网站模板惠州seo代理商
  • 网站上的楼价走势图怎么做百度站长
  • 自己做网站都要什么软件搜索引擎优化期末考试答案