栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

安卓java调用c语言(手机编写)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

安卓java调用c语言(手机编写)

需要用到的应用: 1、Termux 2、AIDE(需要NDK) 步骤:

注:我编写的应用包名为"com.nativeapp",文件路径为"/sdcard/AppProjects/Nativeapp"1

1、编写一个java(需带有native声明) NativeActivity.java
package com.nativeapp;

public class NativeActivity {
    //要在C中实现的方法output。
    public native int output();	
    public static int main() {
    //加载共享库文件libNativeActivity.so文件。
    System.loadLibrary("NativeActivity");
    NativeActivity nativeActivity=new NativeActivity();
    int native1=nativeActivity.output();
    return native1;
    }
}
2、在Termux安装jdk(已经安装了可忽略)
pkg install openjdk-17
3、获得.h头文件

先跳转到java所在的文件夹,比如我的就是"/sdcard/AppProjects/Nativeapp/app/src/main/java/com/nativeapp"
使用javah的话会发现没有javah。
正确的命令应该为

javac -h -jni NativeActivity.java

最后会在所在的文件夹创建一个子目录"-jni"
打开被创建的这个文件夹,里面就是生成的头文件,比如我的文件名就是"com_nativeapp_NativeActivity.h",里面写了

#include 


#ifndef _Included_com_nativeapp_NativeActivity
#define _Included_com_nativeapp_NativeActivity
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jint JNICALL Java_com_nativeapp_NativeActivity_output
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

这个文件不要编辑。

4、编写c NativeActivity.c
#include "com_nativeapp_NativeActivity.h"

JNIEXPORT jint JNICALL Java_com_nativeapp_NativeActivity_output
  (JNIEnv *env, jobject obj){
     return 114514;
  }

5、生成.so文件

使用AIDE编译,注意将文件"Android.mk"最后一行改成

include $(BUILD_SHARED_LIBRARY)

点击运行后会在libs文件夹中生成libNativeActivity.so

6、在应用中放入so文件

注意so文件不是放在lib文件夹而是放在jniLib文件夹!

7、编译获得apk 参考文章:

1、android-ndk-aide,NDK安装教程20180605
2、JAVA调用C语言程序


  1. java文件所在路径为"/storage/emulated/0/AppProjects/Nativeapp/app/src/main/java/com/nativeapp/" ↩︎

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353150.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号