一个apk调用另一个apk的native方法

本文是之前记录在本地的,写的不够详细,旨在记录当时实现的时候遇到的一些问题。


环境需求:一个可以开发NDK的环境、反编译与回编的工具

 

1、  新建一个NDK工程(基本方法步骤网上说的基本都可以),在native方法中实现一个获取随机数的方法供测试,此工程生成的apk将在后面被另一个apk调用。

遇到的问题: 在工程目录下执行: javah-classpath bin -d jni com.feitian.random.Random

的时候出现:classfile for android.app.Activity not found 错误提示

解决方法参考下面的命令:

Javah –classpath E:\android\workspace\Random\bin\classes(当前工程的classes目录,确保工程编译后有此工程名.class文件生成)-bootclasspath(用来指定android.jar包在哪里) E:\adt-bundle-windows-x86-20140702\sdk\platforms\android-19\android.jar–d jni com.feitian.random.Random

输入之后没有报错表示已经成功,但此时可能在jni文件夹里看不到.h文件,因为此时是在dos下操作的,可以通过dos的查看命令dir查看到jni目录下有相关的.h文件。再通过type命令可以查看相关的内容。

 

2、实现动态加载:http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html

先调试了这里两个简单例子的源码,确定一下是可以实现的及了解一些方法

实例如图

调用过程就是:RndTest获取ApkLoader实例instance,通过instance动态加载TestImpl的getTest方法,调用getTest获取TestImpl的实例tl,通过tl调动Random.apk包含的native方法

动态加载注意事项如注释

String path = Environment.getExternalStorageDirectory() + "/";

        Filefile = context.getDir("dex", 0);

        Stringpatha = file.getAbsolutePath();

        Stringfilename = "Random.apk";

        //初始化类加载器

        DexClassLoaderclassLoader = newDexClassLoader(path + filename, patha,

                null, context.getClassLoader()); //.dex

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值