牙叔教程 简单易懂
使用场景
复用c语言, 使用so文件
环境
软件名字
软件版本
autojs
8.8.12-0
android studio
4.1.2
java
1.8.0_131
以上环境配置, 百度很多,不赘述了
Android Studio生成so文件的流程图
android studio生成so文件的步骤讲解
1. 新建java类
// 1. 加载so文件 // 2. 声明本地 *** package com.yashu.usec; public class Student { static { System.loadLibrary("soname"); } public static native int doMathSum(int a,int b); }
2. 生成头文件
cd到路径 app/src/main/java 输入命令 javah -jni com.yashu.usec.Student 会生成头文件 app/src/main/java/com_yashu_usec_Student.h
3. 编写c ***
路径: app/src/main/jni/xiaoqiang.c
4. 编写 Android.mk 和 Application.mk
// 路径 app/src/main/jni/Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := soname LOCAL_SRC_FILES := xiaoqiang.c include $(BUILD_SHARED_LIBRARY)
// 路径 app/src/main/jni/Application.mk APP_PLATFORM := android-26 APP_ALLOW_MISSING_DEPS=true APP_ABI := arm64-v8a, armeabi-v7a, x86, x86_64
5. ***头文件到 app/src/main/jni/com_yashu_usec_Student.h
6. 生成so文件
cd到路径 app/src/main/jni 命令行中输入 ndk-build 生成的so所在文件夹 app/src/main/libs
7. make project, 一共四个步骤
// 1. app的build.gradle中添加ndk配置 android { compileSdkVersion 30 buildToolsVersion "30.0.3" externalNativeBuild { ndkBuild { // Provides a relative path to your ndkBuild script. path file("src/main/jni/Android.mk") } } defaultConfig { ... } }
2. 点击菜单build/make project
3. 提取dex, 路径为 app\build\intermediates\dex\debug\mergeProjectDexDebug\classes.dex
4. 提取so, 我的手机是armeabi-v7a
5. 剩下的要在autojs测试
autojs调用so文件, 执行c函数
// ***so文件到指定目录, 不需要runtime.loadDex var jniPath = ctx.getDir("libs", android.app.Activity.MODE_PRIVATE); log("jniPath = " + jniPath); var dirpath = ctx.getDir("dex", android.app.Activity.MODE_PRIVATE).getAbsolutePath(); log("dirpath = " + dirpath); copy(soPath, new java.io.File(jniPath, "libsoname.so").getAbsolutePath()); var dcl = new Packages.dalvik.system.DexClassLoader( dexPath, dirpath, jniPath, java.lang.ClassLoader.getSystemClassLoader() ); var cls = dcl.loadClass("com.yashu.usec.Student"); var api = cls.newInstance(); let result = api.doMathSum(1, 2); log(result);
参考文章
android studio ndk编译的两种方式(ndk-build和cmake)配置NDK笔记(二)-在Android Studio中使用ndk-buildAndroid NDK系列一(ndk在android studio基本编译配置 ndk-build 和 cmake)android studio ndk环境搭建(Android.mk方式)Android Studio NDK开发之一(Java调用C的 *** )声明
部分内容来自 ***
本教程仅用于学习, 禁止用于其他用途