JNI(Java Native Interface)加载Java的过程中,遇到的主要问题往往与环境设置、库依赖、权限管理以及兼容性相关。本文将围绕“JNI加载Java”的主题,从环境预检到扩展部署,详细记录解决这一问题的步骤和思路。接下来我们来逐步剖析这个过程。
## 环境预检
在解决JNI加载的问题之前,首先需要全面检查我们的环境设置。这里涉及到硬件配置、依赖库版本以及操作系统等方面。
以            
                
         
            
            
            
            # Java JNI 加载 SO 文件的简要指南
Java Native Interface (JNI) 是一种编程框架,可以让 Java 代码调用其他语言编写的程序。通常情况下,它用于与 C 或 C++ 编写的本地库进行交互。在 Android 开发中,JNI 也常用于加载和调用 SO(Shared Object)文件。本文将探讨如何在 Java 应用中使用 JNI 加载 SO 文件,并提供代            
                
         
            
            
            
            1、类加载过程 多个java文件经过编译打包生成可运行jar包,最终由java命令运行某个主类的main函数启动程序,这里首先需要通过类加载器把主类加载到JVM。 主类在运行过程中如果使用到其它类,会逐步加载这些类。 注意,jar包里的类不是一次性全部加载的,是使用到时才加载。类加载到使用整个过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >&            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-10 05:54:01
                            
                                152阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            Java层通过System.load或System.loadLibrary来加载一个so文件,它的定义在Android源码中的路径为libcore/ojluni/src/main/java/java/lang/System.java,执行流程如下:接下来,让我们具体看下System.loadLibrary这个方法的实现。/**
     * Loads the system library spe            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-18 18:08:50
                            
                                230阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            目录前言1.21.1类加载过程1.21.1.1JVM一个类的加载过程1.21.1.1.1加载1.21.1.1.2验证1.21.1.1.3准备 1.21.1.1.4解析1.21.1.1.5初始化1.21.1.1.6使用1.21.1.1.7卸载1.21.1.2一个类被初始化的过程 1.21.1.3继承时父类的初始化顺序1.21.2什么是类加载1.21.2.1概念1.21.2.2JV            
                
         
            
            
            
            (1)问题分析:Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-16 11:01:13
                            
                                18阅读
                            
                                                                             
                 
                
                             
         
            
            
            
              在C中,直接使用JNI加载虚拟机,也是很有意思的想法。  这个工作不难,吾已经完成了。下面这个代码不是我的代码,没有真正测试过。以后有机会再测试。#include <jni.h>using namespace std;int main(const int argc, const char** argv){    JavaVMOption options[7];...            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-06 17:50:42
                            
                                277阅读
                            
                                                                             
                 
                
                             
         
            
            
            
              在C中,直接使用JNI加载虚拟机,也是很有意思的想法。  这个工作不难,吾已经完成了。下面这个代码不是我的代码,没有真正测试过。以后有机会再测试。            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-01-28 13:09:49
                            
                                180阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。允许Java代码和其他语言写的代码进行交互。JNI是JDK提供的一个native编程接口。JNI 允许Java程序调用其他语言编写的程序或者代码库, 比如C/C++。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-07 06:51:51
                            
                                241阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            JNI及sojava如何调用so库里的方法JNI:Java Native Interface的缩写,用Java调用so库就叫着JNI调用方法://在Java中申明一个Native方法 pub            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-05-25 09:58:43
                            
                                269阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            高效加载大图片  
   1.防止OOM 
   
   1.图片压缩,使用bitmapFactory选择方法进行解析,并压缩图片 
   预估一下加载整张图片所需占用的内存。为了加载这一张图片你所愿意提供多少内存。用于展示这张图片的控件的实际大小。当前设备的屏幕尺寸和分辨率。 通过设置BitmapFactory.Options中inSampleSize的值就可以实现图片压缩。  使用这个方法,            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-15 20:56:47
                            
                                104阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、Java内存    Java程序所涉及的内存可以从逻辑上划分为两部分:Heap Memory和Native Memory。  1)Heap Memory:   供Java应用程序使用的,所有java对象的内存都是从这里分配的,它不是物理上连续的,但是逻辑上是连续的。可通过java命令行参数“-Xms, -Xmx”大设置Heap初始值和最大值。 java -Xmx1024m -Xms1            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-06 23:20:49
                            
                                216阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            1、android 类加载器(DexClassLoader的用法),调用其他apk的类中的方法:方式一:   然后在Host中利用下面的方式调用  PackageManager pm = getPackageManager();
        List<ResolveInfo> resolveInfos =  pm.queryIntentActivities(new Intent("            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-29 22:42:35
                            
                                171阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            # Java如何加载jar包中的so JNI
在Java开发中,有时候我们需要使用JNI(Java Native Interface)来调用C/C++编写的代码,而这些代码通常被打包成.so文件。当我们把这些.so文件打包到一个jar包中时,我们需要确保Java程序能够正确加载这些.so文件,以便实现与本地代码的交互。
## 实际问题解决
假设我们有一个名为`native-lib.jar`的            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-05-03 06:43:42
                            
                                462阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            现象:进行Java程序的编译与运行。在操作过程中报错,具体为javac编译成功,而java运行报错;如下图: 错误为:Error: A JNI error has occurred,please check your installation and try again (错误:JNI错误发生,请检查您的安装,然后重试。)查因:1.使用命令:分别查看javac、java的版本号javac            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-05-31 21:18:15
                            
                                453阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            别人写好的动态库,需要自己写jni包一层,这样就可以在java中调用这个库了。其实还有第二种方法,就是使用jna来调用,这样不用写jni,但是今天我们不讨论jna的用法。这里介绍如何在Android Studio中,编写jni调用他人的.so动态库。复制动态库到项目他人提供的库,需要包含头文件,和.so文件。先看一下我的项目主要目录: 把他人提供的so库放在libs目录下,如图所示,我这里他人提供            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-31 19:38:54
                            
                                76阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            一、JNI原理1.java加载本地so库的过程:(1)在java类中加载本地.so库文件,并声明native方法;(native方法就是C/C++方法) (也就是在java层只需要加载对应的JNI库和声明由关键字native修饰的函数) (2)在C代码中实现so库中对应的方法; (3)在java层需要调用native方法的地方进行调用;·从动态加载开始看: 动态加载so库:NDK就是用动态加载,动            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-03 09:57:40
                            
                                80阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            The connection to adb is down, and a severe error has occured.You must restart adb and Eclipse.Please ensure that adb is correctly located at 'D:\eclipse\android-sdk\platform-tools\adb.exe' and can be            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-28 14:44:11
                            
                                90阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
             JAVA JNI,中文含义是java本地调用接口。
说得通俗一点,就是在java程序中可以调用Windows api和c/c++程序。
范例:
在目录E:\kingbase\workspace_72\jni003\src下有两个文件:
TestAPI.java:
public class TestAPI {   &n            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2012-03-03 16:18:21
                            
                                524阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            jni非常好的一篇文章 http://m.blog.csdn.net/article/details?id=22827307 JAVA JNI介绍 http://blog.csdn.net/cyg0810/article/details/7918029 用 JNI 进行 JAVA 编程 http:/            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-08-05 17:49:25
                            
                                215阅读