使用android studio打包jar

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;
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容