jar、arr、so生成和使用

2,322 阅读2分钟

一jar包生成(library才能打成jar)

如果是application,可以修改Application为library,需要修改的地方如下:

apply plugin: 'com.android.application' 改为:apply plugin: 'com.android.library' 

然后注释掉defaultConfig代码块中 applicationId这行代码

步骤:

1.把需要打入jar的代码放到创建的library中

2.把需要打入jar的module的gradle中添加配置

//与android同级
task makeJar(type:Copy){  
  //如果之前存在,则先删除  
  delete 'build/libs/aaa/eee.jar'  
  //设置拷贝的文件    
  from('build/intermediates/packaged-classes/release/')  
  //生成jar包后的文件目录位置   
  into('build/libs/aaa/')   
 //include,exclude参数来设置过滤    
 include('classes.jar')
 //重命名   
 rename('classes.jar','eee.jar')
}
makeJar.dependsOn(build)

3.找到如下图的makeJar双击执行(只有配置了步骤2,才有makejar命令)

4.找到生成的jar文件即可(按照上图配置生成的文件目录为:build/libs/aaa/eee.jar)

注意:jar文件不打入资源文件,清单文件。上述打jar的方式没有混淆,如需要混淆自己google

二.arr生成和使用(module才能打成arr)

如果打成jar,资源文件时无法打入的,如果想要打入资源文件,清单配置文件,so文件我们可以把librarymodule打成arr文件。

步骤:

1.把需要打入jar的代码放到创建的module中

2.如需要混淆,自己开启混淆,配置混淆(自行google)

3..找到如下图的assembleRelease 双击执行

4.去找到生成的arr文件即可使用(/build/outputs/aar/xxx.aar)

5.arr如何使用:放到libs下:

方式一:

android{ 
   repositories {
        flatDir { 
           dirs 'libs' 
        }   
   }
}
dependencies {  
  implementation (name: 'barcode_scanner_library_v2.3.2.0', ext: 'aar')
}

方式二:

dependencies {  
   将   
  implementation fileTree(dir: 'libs', include: ['*.jar'])    
  改为   
  implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}

三so文件生成和使用

配置

1.JNI是个协议,NDK是google提供开发JNI工具包 

2.下载NDK,配置NDK环境变量和Studio依赖 ;使用命令ndk-build检查配置(如path:D:\develop\Sdk\ndk-bundle)

3.兼容老的NDK,gradle.properties配置android.useDeprecatedNdk=true 

写代码

1.mian文件夹下创建jni文件,再创建c,Android.mk和Application.mk文件

生成so文件

www.jianshu.com/p/92fdedddd…(如果再次打,删除build文件,找到如上图的assembleRelease 双击执行)

找到生成的so文件:app/build/intermediates/merged_native_libs/release/out/lib

使用so文件

blog.csdn.net/anhenzhufen…

注意:期间遇到一个坑,只加载了so文件,jni没有打成jar包,使用的时候自己写native方法,但是呢,因为jni方法和c方法需要按照一定规则,自己写native方法的时候,包名已经改变,一直报没有找到c的实现方法。

c源码

#include<stdio.h>
#include<stdlib.h>
#include<jni.h>
/**
 * jstring :返回值
 * Java_全类名_方法名 (.换成_)
 * @param env   固定参数,里边有很多方法
 * @param jobj  固定参数,谁调用这个方法就是谁的实例,类似this
 * @return  返回值字符串
 */
jstring  Java_com_example_myapplication_JNI_sayHello(JNIEnv*  env, jobject jobj){
    char*  text = "hello,我是张文浩~";
  return  (*env)-> NewStringUTF(env,text);
}

视频教学:www.bilibili.com/video/av221… ---从26开始看