上层Java APP如何调用底层C++ Code?(就像使用Android SDK一样)
比如我用C++调用Linux系统中的API来封装File族函数功能,现在想对上面的APP提供一个叫File的Java类。一般怎么做。(只是比喻)
现在想开发下图红色粗框中的部分供上层调用,不知道需要做哪些事,用什么方法技术?
比如我用C++调用Linux系统中的API来封装File族函数功能,现在想对上面的APP提供一个叫File的Java类。一般怎么做。(只是比喻)
现在想开发下图红色粗框中的部分供上层调用,不知道需要做哪些事,用什么方法技术?
解决方案 »
- Android.mk文件配置
- 修改wifi优先级
- 为什么要点两次返回才能回到上个activity?????
- 求教:使用SimpleCursorAdapter如何才能从数据库的最后一条数据开始显示
- 如何实现一个可以存放另外几个apk的apk
- activty转换
- android 加载页面!!!!!!!
- Android ScrollView 的内容显示不全
- Android ExpandableListView中嵌套Gridview
- android studio debug模式提示:target package is not specified in androidmanifest.xml
- 这里不能发招聘贴吗?为什么删我的贴?
- 求教~~~android 3D开发
如果在app层频繁使用java封装的API 用jni函数调用底层的c 并不是一个很有效率的做法
就像你说的file 既然c给你了file 你就直接写c去用file不就好了
我觉得 尽量避免频繁使用jni调用c code
jni的效率真的不高
1.如楼上诸位所说,将其加入到framework中,通过jni方式调用。
2.使用System.loadLibrary(...),在程序中加载so库,直接调用其中的api。
你好:
小弟新手。最近也在做这方面的研究。想问一下,这个两个方法有什么本质的不同吗?方法2不需要JNI 来封装一下吗?可以直接调用吗?
1. 编写带有native 声明的方法的java 类
2. 使用javac 命令编译所编写的java 类
3. 使用javah ?jni java 类名生成扩展名为h 的头文件
4. 使用C/C++实现本地方法
5. 将C/C++编写的文件生成动态连接库其实使用原生代码(C,C++)是很有用的,比如高性能和高保密的应用逻辑用C开发,可以提高效率,可重用性和安全性。最好是内存需求少,CPU需求多的应用。
NDK 是编译嵌入在Android 应用中的原生代码的工具,提供交叉编译。可以生成原生代码库,并将原生代码库嵌入APK应用中。还有上面的问题,JNI是一种实现库的方式。loadLibrary是一种加载库的方式。//android 中调用的代码
public class HelloJni extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText( stringFromJNI() );
setContentView(tv);
}
public native String stringFromJNI();
public native String unimplementedStringFromJNI();static {
System.loadLibrary("linhai-jni");
}
}//NDK 中的代码
//用本地方法返回一个VM的String.
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
public class File { public native String getStringItem(); static {
System.loadLibrary("File");
}
}用命令行生成C的头文件(先编译,com.test.jni是包名,例子,然后再生成头文件)。javac com/test/jni/File.java
javah -jni com.test.jni.File引用头文件,写c/c++代码,然后生成libFile.so文件(例子,lib是前缀,不可少)
创建android工程,在根目录下创建libs文件夹,在libs文件夹下创建armeabi文件夹,
将libFile.so文件放在armeabi文件夹下。最后,正常调用File类的方法。
你看下android核心块全是用jni的。。