美文网首页Android开发经验谈
使用android studio打包jar

使用android studio打包jar

作者: STrawberryer | 来源:发表于2017-08-06 17:39 被阅读235次

    1、需要使用一个辅助项目,我将其命名为MakeJar,用来编译c或者c++文件,打包相应的jar包。

    2、配置app目录下的build.gradle文件 加粗的是在gradle.properties中设值

    在android->defaultConfig的花括号里添加如下代码
    externalNativeBuild{
    ndkBuild{
    ⑴、//设置 APP_PLATFORM,不是必要的,也可以在Application.mk中设置
    arguments 'APP_PALTFORM=android-'+**TARGET_SDK_VERSION**

    ⑵、//设置 NDK_MODULE_PATH ,使用project.file 方法可以实现相对目录的查找
    def module_paths = [project.file("模型1").absolutePath,project.file("模型2").absolutePath,或者更多的模型]
    //使用Os,要导入 import org.apache.tools.ant.taskdefs.condition.Os
    if(Os.isFamily(Os.FAMILY_WINDOWS))
    {

    // 如果是Window 则需要使用 '/'
    module_paths = module_paths.collect {it.replaceAll('\\\\', '/')}
    arguments 'NDK_MODULE_PATH=' + module_paths.join(";")
    }else{
    arguments 'NDK_MODULE_PATH=' + module_paths.join(";")
    }
    ⑶、//设置编译的CPU核数。-j4 表示 4核同时编译。加快编译速度。
    arguments '-j' + Runtime.runtime.availableProcessors()

    ⑷、//设置abi 从 APP_ABI自定义变量中获取自己想要编译的abi,这个APP_ABI 在gradle.properties中自定义设值。我这里使用 ':' 分号隔开不同的abi
    abiFilters.addAll(**APP_ABI**.split(':').collect{it as String})

    ⑸、//设置NDK_PROJECT_PATH的路径, (我找不到在其他地方设置这东西,所以我用了一个很暴力的方法,在arguments里面直接设置这个 :( ,如果有人知道可以留言。感谢)。在这里设置会造成的结果是,生成的 buildCommand 里面会有两个NDK_PROJECT_PATH,第一个是null,第二个是自己设置的。
    arguments 'NDK_PROJECT_PATH='+project.file("c/c++文件项目路径").absolutePath
    ⑹、//如果要自己设置android.mk的地址就加入如下
    path 'Android.mk文件相对此文件的地址'
    //Android.mk和Application.mk的编写具体看官方文档
    }
    }

    build.gradle里面的设置就如上所示。

    然后就要在根目录下的 gradle.properties 里设置自定义的值啦。
    //我要要编译cpu架构是 armeabi 和armeabi-v7a 的
    APP_ABI=armeabi:armeabi-v7a
    //我要编译sdk版本为15 的
    TARGET_SDK_VERSION=15

    3、在java目录下写好相应的类

    例如:HelloJni.java

    4、编译 jar文件 和 so文件

    我是在Gradle projects视窗中 在other下找到jarReleaseClasses 的任务,双击编译所有文件。
    在build -> intermediates -> ndkBuild 下获得所有的so文件
    在build -> intermediates -> packaged 下获得classes.jar文件,将其重命名就可以直接配合so文件一起使用了

    5、在需要使用库的项目中的gradle文件中加入

    sourceSets { main { jniLibs.srcDirs = ['libs'] }}
    加在android或括号里面。将so文件 jar 文件复制到libs。
    右键jar文件,选择as library 就可以添加为库了。

    文件内容实例:

    Android.mk内容

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := hello-jni
    MY_CPP_SOURCE_ROOT := $(LOCAL_PATH)/../CppCode/
    LOCAL_SRC_FILES := $(MY_CPP_SOURCE_ROOT)/*.cpp
    LOCAL_C_INCLUDES := $(MY_CPP_SOURCE_ROOT)/*.hpp
    include $(BUILD_SHARED_LIBRARY)
    

    Application.mk的内容

    APP_PLATFORM := android-15
    

    HelloJni.java内容

    public class HelloJni
    {
    public native String stringFromJNI();
    public boolean Initialize(){
    try{
    System.loadLibrary("hello-jni");
    }catch(UnsatisfiedLinkError e){
    return false;
    }
    return true;
    }
    }
    

    相关文章

      网友评论

        本文标题:使用android studio打包jar

        本文链接:https://www.haomeiwen.com/subject/encnlxtx.html