浅谈Android Studio JNI生成so库
作者:jingxian 发布时间:2021-09-25 21:55:11
1.新建Android studio工程
2.新建class:AppKey.java.主要为了保存密钥
代码块
package com...adminapp.lib.utils.jni;
/**
* Created by seven on 16/9/8.
*/
public class AppKey {
static {
System.loadLibrary("AppKey");
}
public static native String WechatId();
public static native String WechatSecret();
public static native String QQId();
public static native String QQKey();
}
3.编译JNI文件,生成.h文件
•1)选中整个Project,在菜单栏选中Build->Make Project
•2)查看TestJNI/app/build/intermediates/classes/debug/com…/AppKey.class
•3)在Android studio的Terminal中进入app/build/../debug/目录下,然后执行:
javah -jni com….adminapp.lib.utils.jni.AppKey
生成.h文件
4.编译生成so文件
•1)在src/main目录下新建jni目录和java目录平级,用来保存生成的.h文件。将步骤3生成的com_…_adminapp_lib_utils_jni_AppKey.h文件拷贝到新建的jni目录。
•2)使用C/C++实现JNI,在jni文件夹下,创建com_…_adminapp_lib_utils_jni_AppKey.h对应的c文件:AppKey.c
•3)创建mk文件,并使用ndk-build命令生成.so动态链接库文件
在jni目录下创建Android.mk文件如下:
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=AppKey
LOCAL_SRC_FILES=AppKey.c
include $(BUILD_SHARED_LIBRARY)
其中LOCAL_PATH:是C/C++代码所在目录,也就是我们的jni目录。
LOCAL_MODULE:是要编译的库的名称。编译器会自动在前面加上lib,在后面加上.so。
LOCAL_SRC_FILES:是要编译的C/C++文件。
在jni目录下创建Application.mk文件如下:
APP_PROJECT_PATH := $(call my-dir)
APP_MODULES := TestJNI
•4)使用ndk-build命令生成so库


猜你喜欢
- 本文实例讲述了Java模拟死锁发生之演绎哲学家进餐问题。分享给大家供大家参考,具体如下:一 点睛常见的死锁形式:当线程1已经占据资源R1,并
- 前期准备首先要先明确有个大体的思路,要实现什么样的功能,了解完成整个模块要运用到哪些方面的知识,以及从做的过程中去发现自己的不足。技术方面的
- 使用OptionMenu只要重写两个方法public boolean onCreateOptionsMenu(Menu menu):菜单的初
- 这篇文章主要介绍了如何使用Jenkins编译并打包SpringCloud微服务目录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有
- C#事件使用+= -=使用起来是很方便的,但是却不能整体清空所有事件。比如一个常见的操作,打开界面注册监听事件,关闭界面需要把所有的事件清空
- 目录前言:一、IronPython二、Python打包exe调用三、Python提供WebApi接口(推荐)总结:前言:在平时工作中,需求有
- 以下这段C#代码实现的功能是在屏幕上画图的效果!具体代码如下://DllImport所在的名字空间 using System.Ru
- 一、参数校验springboot 使用校验框架validation校验方法的入参SpringBoot的Web组件内部集成了hibernate
- 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象
- 在混淆编译之前,我的程序可以正常运行,混淆编译时,报告如下错误: Error:Execution failed for task ‘:gvi
- Thread parameterThread_t = null; private void Print_DetailForm_S
- controller传boolean形式值@GetMapping("/check-cart")public List&l
- ??Chip监听选中状态的监听:setOnCheckedChangeListener,该监听只有设置了checkable 属性为true或者
- 为了实现自定义的Menu和ContextMenu效果,下面演示代码通过派生ProfessionalColorTable类,在自定义的类中重写
- 一、系统启动后注入配置package com.example.config;import org.springframework.beans
- 一般表单数据分为两类<form method="post" action="${pageContext.
- ArrayList底层维护的是一个动态数组,每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列
- 前言现如今几乎大多数Java应用,例如我们耳熟能详的tomcat, struts2, netty...等等数都数不过来的软件,要满足通用性,
- 单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到。比如在Android实际APP 开发中用
- Springboot自带定时任务实现动态配置Cron参数同学们,我今天分享一下SpringBoot动态配置Cron参数。场景是这样子的:后台