这两天研究android的动态加载,下面把心得和大家分享一下吧!


首先上一个实例:


这个是stackOverFlow上面的一个帖子,被采纳的答案解决了这个问题:


http://stackoverflow.com/questions/6857807/is-it-possible-to-dynamically-load-a-library-at-runtime-from-an-android-applicat


简单翻译一下:


第一步:

建一个普通的android项目,里面添加一个类:


package org.shlublu.android.sandbox;

import android.util.Log;

publicclassMyClass{

publicMyClass(){

Log.d(MyClass.class.getName(),"MyClass: constructor called.");

}

public void doSomething(){

Log.d(MyClass.class.getName(),"MyClass: doSomething() called.");

}

}



第二步:

把这个android项目导出为apk (当然也可以打成jar包,如果打成jar包,那么jar包里面必须包含classes.dex,这个classes.dex里面包含了上面的MyClass类)


第三步:

新建一个android项目(或者用刚刚那个也行)

在里面添加这样一个activity:


public class Main extends Activity

{@SuppressWarnings("unchecked")

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

try{

final String libPath =Environment.getExternalStorageDirectory()+"/shlublu.jar";

final File tmpDir = getDir("dex",0);

final DexClassLoader classloader =newDexClassLoader(libPath, tmpDir.getAbsolutePath(),null,this.getClass().getClassLoader());

final Class<Object> classToLoad =(Class<Object>) classloader.loadClass("org.shlublu.android.sandbox.MyClass");

final Object myInstance = classToLoad.newInstance();

final Method doSomething = classToLoad.getMethod("doSomething");

doSomething.invoke(myInstance);

}catch(Exception e){

e.printStackTrace();

}

}

}


第四步:

跑起来,进入上面的Main

查看Log看结果,是不是发现log里面已经有了我们刚刚第一步添加的MyClass中的方法了?


下一篇文章来解释一下上面的程序。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  3. Android开发之adapter
  4. Android(安卓)解决bug:异常提示"ListView cannot be cast to andr
  5. WebRTC Android(安卓)源码编译
  6. 【Android(安卓)Native Code开发系列】 五 运行、调试编译的Nati
  7. app目录下的build.gradle详解
  8. Android(安卓)7.1.1 Toast引起的Crash
  9. 使用Titanium在Android上编写Javascript应用

随机推荐

  1. Java实现单向链表
  2. 为什么 MongoDB 索引选择B-树,而 Mysql 索
  3. Android实现取消GridView中Item选中时默
  4. 分享Android平板电脑上开发应用程序不能
  5. Eclipse中将一个android项目当做另外一个
  6. 导入Eclipse工程到Android(安卓)studio
  7. Springboot中的javaConfig详解(基于Spring
  8. Android(安卓)平滑和立体翻页效果1
  9. Android(安卓)Canvas绘图抗锯齿解决方法
  10. Android(安卓)ListView的常见用法