在单位的项目中,需要一个算法来计算一个特殊值,可是相关的部门却不给计算公式,只是给了几个封装好的so文件和一个.h文件,让传入几个值,然后得到相应的值。拷。。。。。没法子,人家不给,我们只好调用这个了。

这里在导入so文件和调用其中的方法时,遇到很多坑,这里做一个记录,以备以后查询。

我使用的as1.5版本,一直没有升级呢。所以这里的所有方法,都是针对这个版本来的。

第一步,我们将相关的so文件,复制到libs文件里。

这里,相关部门给出了所有应该有的文件夹的.so文件,如下图

这里要注意一点,如果你加完之后,找不到.so文件,你看一下你有没有armeabi-v7a文件夹,在此文件夹里,一定要有so文件,不然在有些版本中就会出现错误。

第二步,修改,我们app下面的build.gradle文件,添加如下代码

task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {

destinationDir file("$projectDir/libs")

baseName "Native_Libs2"

extension "jar"

from fileTree(dir: "libs", include: "**/*.so")

into "lib"

}

tasks.withType(JavaCompile) {

compileTask -> compileTask.dependsOn(nativeLibsToJar)

}                    这段代码,是与buildTypes同级的,如下图

第三步,建立相应的包与类文件

这里我们要根据给的.h文件来建立相应的包,文件名是这个com_romaway_stocklib_StockIndex.h那么,我们就要建立一个com.romaway.stocklib包,然后在此包中,建立StockIndex.class文件。建好后,如下图

第四步,根据给出的.h文件,我们根据里面的方法,编写相应的方法,我的文件里,是这样的,只有一个方法,带了10多个数组。

下面是我的.h文件,我们/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class com_romaway_stocklib_StockIndex */

#ifndef _Included_com_romaway_stocklib_StockIndex

#define _Included_com_romaway_stocklib_StockIndex

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: com_romaway_stocklib_StockIndex

* Method: CalcZiWuLine

* Signature: ([D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D)I

*这里注意,看到_CalcZiWuLine了吗,这个就是你要编写的方法名了

*/

JNIEXPORT jint JNICALL Java_com_romaway_stocklib_StockIndex_CalcZiWuLine

(JNIEnv *, jclass, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray, jdoubleArray);

#ifdef __cplusplus

}

#endif

#endif                    StockIndex.class文件如下

public class StockIndex{

public static native void CalcZiWuLine(double[] list_open,double[] list_close,double[] list_high,double[] list_low,

double[] list1,double[] list2,double[] list3,double[] list4,double[] list5,

double[] list6,double[] list7,double[] list8,double[] list9,double[] list10,

double[] list11,double[] list12,double[] list13);

}

OK,当你写完之后,你会发现这页有提示有错,这里呢,我们先不去管它,一会做统一处理。

第五步,在你想要的地方进行调用这个方法

package com.example.cg.sofileopera;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import com.romaway.stocklib.StockIndex;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

static

{

System.loadLibrary("StockIndex"); //引入包名

}

private Button btn_view;

private TextView txt_1;

private TextView txt_2;

private TextView txt_3;

private TextView txt_4;

private TextView txt_5;

private TextView txt_6;

private TextView txt_7;

private TextView txt_8;

private TextView txt_9;

private TextView txt_10;

private TextView txt_11;

private TextView txt_12;

private TextView txt_13;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initControls();

}

/**

* 初始化控件

*/

private void initControls(){

btn_view = (Button)findViewById(R.id.btn_view);

btn_view.setOnClickListener(this);

txt_1 = (TextView)findViewById(R.id.txt_1);

txt_2 = (TextView)findViewById(R.id.txt_2);

txt_3 = (TextView)findViewById(R.id.txt_3);

txt_4 = (TextView)findViewById(R.id.txt_4);

txt_5 = (TextView)findViewById(R.id.txt_5);

txt_6 = (TextView)findViewById(R.id.txt_6);

txt_7 = (TextView)findViewById(R.id.txt_7);

txt_8 = (TextView)findViewById(R.id.txt_8);

txt_9 = (TextView)findViewById(R.id.txt_9);

txt_10 = (TextView)findViewById(R.id.txt_10);

txt_11 = (TextView)findViewById(R.id.txt_11);

txt_12 = (TextView)findViewById(R.id.txt_12);

txt_13 = (TextView)findViewById(R.id.txt_13);

}

@Override

public void onClick(View view){

switch (view.getId())

{

case R.id.btn_view:

tempData();

break;

}

}

private void tempData(){

double[] arrOpen = new double[5];

double[] arrClose = new double[5];

double[] arrHigh = new double[5];

double[] arrLow = new double[5];

double[] arr1 = new double[5];

double[] arr2 = new double[5];

double[] arr3 = new double[5];

double[] arr4 = new double[5];

double[] arr5 = new double[5];

double[] arr6 = new double[5];

double[] arr7 = new double[5];

double[] arr8 = new double[5];

double[] arr9 = new double[5];

double[] arr10 = new double[5];

double[] arr11 = new double[5];

double[] arr12 = new double[5];

double[] arr13 = new double[5];

arrOpen[0] = 19.69;

arrOpen[1] = 25.99;

arrOpen[2] = 28.59;

arrOpen[3] = 28.59;

arrOpen[4] = 34.6;

arrClose[0] = 23.63;

arrClose[1] = 25.99;

arrClose[2] = 28.59;

arrClose[3] = 31.45;

arrClose[4] = 34.6;

arrHigh[0] = 23.63;

arrHigh[1] = 25.99;

arrHigh[2] = 28.59;

arrHigh[3] = 31.45;

arrHigh[4] = 34.6;

arrLow[0] = 19.69;

arrLow[1] = 25.99;

arrLow[2] = 28.59;

arrLow[3] = 31.45;

arrLow[4] = 34.6;

new StockIndex().CalcZiWuLine(arrOpen, arrClose, arrHigh, arrLow, arr1, arr2, arr3, arr4, arr5, arr6, arr7, arr8, arr9, arr10,

arr11, arr12, arr13);

String str1= "";

String str2= "";

String str3= "";

String str4= "";

String str5= "";

String str6= "";

String str7= "";

String str8= "";

String str9= "";

String str10= "";

String str11= "";

String str12= "";

String str13= "";

for(int i=0;i<5;i++)

{

str1 += arr1[i] + ",";

str2 += arr2[i] + ",";

str3 += arr3[i] + ",";

str4 += arr4[i] + ",";

str5 += arr5[i] + ",";

str6 += arr6[i] + ",";

str7 += arr7[i] + ",";

str8 += arr8[i] + ",";

str9 += arr9[i] + ",";

str10 += arr10[i] + ",";

str11 += arr11[i] + ",";

str12 += arr12[i] + ",";

str13 += arr13[i] + ",";

}

txt_1.setText(str1);

txt_2.setText(str2);

txt_3.setText(str3);

txt_4.setText(str4);

txt_5.setText(str5);

txt_6.setText(str6);

txt_7.setText(str7);

txt_8.setText(str8);

txt_9.setText(str9);

txt_10.setText(str10);

txt_11.setText(str11);

txt_12.setText(str12);

txt_13.setText(str13);

}

}

代码完成,现在编译,运行,报错。没事,这里只要设置一下。File--->Settings--->Plugins,将Android NDK Support后面的对勾去掉如下图

再运行,一切正常,得到了我想要的值

android 引入 .so,android studio导入so文件,并调用其中的方法相关推荐

  1. Endnote 导入enw文件无响应及解决方法

    Endnote 导入enw文件无响应及解决方法 参考文章: (1)Endnote 导入enw文件无响应及解决方法 (2)https://www.cnblogs.com/shuaihe/p/114701 ...

  2. mysql转储导入错误_数据库MYSQL导入SQL文件时错误的解决方法(2种)

    从服务器数据库用navicate导出的.sql文件后再用navicate导入到本地的数据库中会出现若干条记录的错误: [Err] 1064 – You have an error in your SQ ...

  3. JavaScript文件中调用AngularJS内部方法或改变$scope变量

    需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controll ...

  4. Android Studio导入so文件到项目中

    1.采用最简单直接的方式导入s0文件:在app下新建jniLibs/armeabi目录,并将指定so文件拷贝到这一目录. 2.一般来说其他第三方的开放平台的so文件都是已经把对应的本地Java接口类一 ...

  5. Android系统签名生成Studio导入系统keystore

    一.Android签名文件简述 为什么要签名? 任何一个安装包都需要有签名.为App签名的本质是说明这个App是我开发的,不是别人.通过签名可以在应用和开发者之间建立可信任的关联. 通过签名,Andr ...

  6. 80m的mysql文件要导入多久_mysql导入数据库文件最大限制更改解决方法:You probably tried to upload too large file...

    最近一次在用phpmyadmin导入mysql数据库时,偶的15M的数据库不能导入,mysql数据库最大只能导入2M.. phpmyadmin数据库导入出错: You probably tried t ...

  7. matlab 导入元胞,MATLAB导入xls文件以及cell的使用方法

    使用matlab读入.xls的文件时候可以用[T,TXT,RAW]=xlsread("filename.xls")导入也可以使用import data 的办法手动导入文件.但是我比 ...

  8. Google drive谷歌网盘下载副本文件无法调用IDM解决方法

    最近通过加入星标并复制产生副本文件来解决谷歌限制文件大小时,遇到了Google drive谷歌网盘下载副本文件无法调用IDM来进行下载,只能够使用浏览器直接下载. 但是直接下载原文件没有出现问题,可以 ...

  9. android studio导入arr文件

    把arr文件导入android studio 其实只需要简单的几步,本文以NativeImgCompress.arr为例: 1.把.arr文件复制到libs目录下 2.在app的build.gradl ...

最新文章

  1. JPA 注解的CascadeType属性
  2. Ehcache 缓存监控配置
  3. eclipse的下载JDK的安装与配置
  4. 丢失api-ms-win-crt-runtime-l1-1-0.dll问题解决
  5. debian及ubuntu挂载本地硬盘的ISO镜像文件
  6. 20220213-CTF MISC-a_good_idea(stegsolve工具的使用)-2017_Dating_in_Singapore
  7. 《html5 从入门到精通》读书笔记(一)
  8. virsh 基于xml create VMs虚机
  9. Sun HotSpot JVM内存管理及垃圾收集
  10. softmax的简洁实现
  11. 数据挖掘面试题之梯度提升树
  12. 《工作型PPT设计之道》培训心得
  13. abaqus结果名称
  14. GB50311-2007综合布线工程设计规范
  15. 16. Spring boot 错误页面
  16. UVa 12304 2D Geometry 110 in 1!(圆的处理)
  17. python常用的几个库_盘点Python常用的20个库
  18. Java 应用程序,该程序中有 3 个类:Triangle、T rapezium 和 Circle,分别用来 表示三角形、梯形和圆形。
  19. Bootstrap学习笔记——缩略图、警示框、进度条、媒体对象、列表组、画板
  20. 2018.11.3 PION模拟赛

热门文章

  1. 为什么 Facebook 的 Libra 会招来科技监管的雷霆之锤?
  2. 权威解读 GitHub、Apache 疑云:主流开源软件究竟是否会被闭源?| CSDN 独家
  3. 独家!币安被盗原因找到了!7074 枚比特币竟是这样丢掉的
  4. 2018 OpenInfra Days China 大咖来袭——开源,我们是认真的
  5. 马化腾回应《腾讯没有梦想》:我的理想不是赚多少钱
  6. 动我 Java?是时候让甲骨文退休了!
  7. elk-可视化图标(nginx)
  8. zabbix监控nginx连接数
  9. python如何让进程运行在指定的cpu上_java程序可以实现在指定CPU上运行吗?
  10. python计算并返回任意多个整数的和_利用Python的多重处理方法计算一个长输入lin的整数和...