首先从官网下载最新的SDK,其它都是默认安装

作者: 操作系统  发布:2019-11-20

介绍怎么样的就免了.直接进去正题

先是最有代表性的参谋链接:

原稿地址:

平台: Windows 10

上边是私有配置SDK开采经历

 

IDE : Visual studio 2017

  1. 下载LibreOffice与SDK

有意气风发种方法无需本人安顿全数的Sun JDK, Android SDK以致NDK,Eclipse等装置,使用已经配备好的支付套件就足以扩充直接的支出,由NVIDIA开垦的付出套件Tegra Android Development Pack可以看到一贯设置好全数的付出蒙受,并且流行的本子还隐含了OPENCV,不想和睦配置的仇敌能够直接下载这一个套件。可是我小编并未尝试过使用那几个套件,怎么使用也不领悟,所以只要不想自个儿配置处境的话依然须要自身去走访那么些套件的应用。

首先从官方网址下载最新的SDK,

    链接:

 

创办流程. 

 

 

总括一下重大点. (注意:官方网站教程里的SDK目录和连串目录是同级目录,所以利用了相对路线,实际项目中要凭仗意况修改)

  1. 安装LibreOffice与SDK

 

  1. 将 sciter-sdkinclude 出席包括目录

    安装进度比较轻巧,若要改正安装目录时则改成钦点的设置目录就可以,其它都以默许安装。

1. Sun JDK

 

 

率先须要设置java开垦景况,这里不可不接收Sun JDK,无法利用Opencv JDK. 安卓开垦不帮衬Opencv JDK.

JDK下载地址:

建议下载牢固版本的J2SE.

安装好 Sun JDK后需求依据java JDK的装置格局地署处境变量。

安装JDK系统情况变量:

在情况变量中增添如下内容

JAVA_HOME= C:Program FilesJavajdk1.X.XXX
Path=…..; %JAVA_HOME%bin

 

图片 1

 

 

2. 转移输出目录(可选)

    先安装LibreOffice,再安装SDK(注:SDK安装的门路采取跟LibreOffice安装路线相似)

2. Android SDK

 

 

安装安卓开拓用的SDK,可以从    这里下载最新的SDK。下载完结后解压缩到叁个不含有空格的目录就能够。提议使清晰明了的目录,未来还要用。

提出将SDK安装到独门的文件夹中,文件夹名不要有空格,也毫不起汉语名字。

Android SDK 不用配置体系蒙受变量,在Eclipse中开创Android的工程时候依旧设置完ADT(Android Development Tools)之后会提示配置Android  SDK 目录。这里只要保障目录名字不包涵空格就足以了。

 

 

  1. 校订DPI 识别选项

    LibreOffice安装路线:D:LibreOffice

3. Eclipse

 

 

下载Eclipse作为支付用的IDE

下载地址:

唤醒:最新发掘下载的ADT中带有了最新版本Eclipse,能够绝不下载。

 

 

4. 将 sciter-sdk/include/sciter-win-main.cpp 文件增加到项目

    SDK安装路线:D:LibreOfficesdk

4. Android Development Tools(ADT)

 

 

下载安卓开辟工具包,富含部分常用的开辟工具。

也得以直接动用Eclipse在线安装,但下载后再装相比较便于,速度快。

下载地址: 

 

下载完ADT后,给Eclipse安装ADT组件。

在Eclipse中:菜单Help-->Install new Software

 

图片 2

 

安装ADT时的截图如下:

 

图片 3

 

 

以当时候会见到两类组件,少年老成类是Develop Tools,还可能有正是NDT Plugins,NDT Plugins是地面编制程序编写翻译工具,也正是用来编写翻译本地C++代码的,提出将两组织工作具都全体设置。

非常表达:假诺你必要做本地C++开垦以来,必必要把NDT Plugins勾选上。(注释:安装的时候必得接受NDK Plugins卡塔 尔(阿拉伯语:قطر‎

 

图片 4

 

 

5.替换IDE自动生成的 helloWorld.cpp 为

3. 设置完SDK后,可依附SDK目录下的docinstall.html里面包车型地铁链接下载并安装须要的工具。

5. 配置Eclipse

 

 

ADT安装收尾,应该可以在Eclipse工具栏和Window菜单上找到Android SDK微电脑的Logo

 

图片 5

 

点击Preferences起初设置Eclipse的Android开垦条件……

 

图片 6

 

安装安卓开辟的SDK目录,这里要求将SDK目录内定到刚刚大家下载的Android SDK目录的根目录。

 

图片 7

 

 

在Eclipse中精选Windows->Android SDK Manager,能够处理下载的SDK,也能够下载最新的SDK,用于差异的SDK平台开垦。

选料你所须求开拓的阳台的SDK(小编最初下载的不得了SDK包涵了重重版本的SDK,然而最新下载的新式的SDK,结果只含有了很好的Android 4.3的API,比很多都急需团结下载)

 

图片 8

 

 

// HelloWorld.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "HelloWorld.h"

#include "sciter-x-window.hpp"

class frame : public sciter::window {
public:
  frame() : window(SW_TITLEBAR | SW_RESIZEABLE | SW_CONTROLS | SW_MAIN | SW_ENABLE_DEBUG) {}
};

#include "resources.cpp"

int uimain(std::function<int()> run) {

  //sciter::debug_output_console console; - uncomment it if you will need console window

  sciter::archive::instance().open(aux::elements_of(resources)); // bind resources[] (defined in "resources.cpp") with the archive

  frame *pwin = new frame();

  // note: this:://app URL is dedicated to the sciter::archive content associated with the application
  pwin->load(WSTR("this://app/main.htm"));

  pwin->expand();

  return run();

}

    工具:

6. 创制虚构机

 

 

接纳Android Virtual Device Manager管理和创制虚构机,用于调节和测验。

(配置设想机的时候,有的设想机配置能够选拔是或不是模拟GPU,提议依照本身的配置需求实行测量试验,小编有二次选用了模拟GPU,结果模拟器的图像突显完全不正规)

 

图片 9

 

图片 10

 

图片 11

 

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 

    1)LibreOffice与SDK

地点部分注重介绍了Android开辟意况的着力配置步骤,上面将在通过演示,讲授怎样布置NDK举办业地JNI调用。

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 

 

6.在类型根目录下增加 res/main.htm

    2)JDK(1.5 or higher)

7.  安装CDT(CDT plugin for Eclipse)

 

 

 

Eclipse的CDT插件是用来在Eclipse举行C++开采的工具,倘诺你在安插安卓开拓条件的时候安装ADT的进度中,已经选取了NDK Plugins,那么就无需再进行设置了,因为NDK Plugins已经包涵了CDT,如下图:

 

假诺在安装的时候从不选拔NDK插件,那么供给重新安装CDT。

 

图片 12

 

 

 

<html>
    <head>
        <title>Test</title>
        <style></style>
        <script type="text/tiscript"></script>
    </head>
    <body>

      Hello World!

    </body>
</html>

    3)C++ complier (Windows:Microsoft C++ Compiler, Microsoft Visual Studio 2008 or the Express version (cl, version 15.00.21022))

8. Android NDK

 

 

访问 http://developer.android.com/sdk/ndk/index.html 

下载最新的Android NDK,是三个ZIP解压包,只需解压到有个别路线就可以,举例"F:android-ndk-r8b-windowsandroid-ndk-r8b",再把这几个路子增多到系统的境遇变量PATH中。

update: 这段日子自笔者使用的本子是:android-ndk-r10d

 

  1. 安装Cygwin(能够选用性安装,通过命令行进行编写翻译C++代码, 不建议利用卡塔 尔(阿拉伯语:قطر‎

 

比方您是在windows上作开垦,能够筛选安装,就算是在ubuntu上,则根本不供给设置。

 

在 那篇博客中,第三片段,介绍了应用Cygwin的艺术,不过此地不引入应用,所以倘诺您想行使的话,请参见上边链接中的博客配置情势。

 

 

 

  

    4)Microsoft .NET Framework SDK version 1.0 or higher

10. OpenCV For Android

 

 

 

下载最新的opencv for android,

下载地址:

设置完之后最棒布局遭受变量。

 

(不配备情状变量也得以,能够一贯在eclipse中钦定opencv头文件的带有目录卡塔尔

讲明: 近年来留心看了下opencv for android与opencv的差距,opencv4android也包罗了opencv中的c++的头文件,所以豆蔻梢头旦你在此之前的c/c++代码使用了opencv的头文件,那么毫无原本的opencv 也能够,因为opencv4android也是有c/c++的头文件,只要您的工程安顿能够找到那么些头文件就可以。其它,opencv4android中入眼蕴涵的是java版本的API, 都以.so链接库,.so 链接库是linux用的链接库文件。

 

***************

opencv4android中还饱含了opencv.mk那样的一个make文件,那个文件对此编写翻译本地opencv代码是特别首要的,假若您不想用opencv4android的SDK,然则也要把那些SDK中的opencv.mk这一个文件复制到你的opencv目录可能别的目录,今后在 Android主次中配备NDK本地编写翻译的时候须要动用这么些文件。非常首要。

**********

 

 

7.在类型根目录下增多 pack-resources.bat . 然后保存运营

    5)GNU make (3.79.1 or higher)

11. 在Android中使用Opencv

 

 

接受opencv有二种方法,生龙活虎种是运用opencv的java版本的API,可是这种措施不是经过本地调用完结的,全部是java代码,所以这里先不讲,此外意气风发种格局正是使用opencv的c++版本的API,将本地c++代码编写翻译成.so链接库,然后在安卓支出中实行调用,本地cpp代码应用NDK实行编译。

 

..sciter-sdkbinpackfolder.exe res resources.cpp -v "resources"

    6)zip tool (2.3 or higher)

11.1 安卓java代码

 

上边给出叁个运用Canny算子检查实验边缘之处代码调用的接受方法。

新建筑和安装卓项目,配置使用安卓API等消息,这里我的项目名字为HaveImgFun

接下来纠正分界面调整文件res->layout->activity_have_img_fun.xml

 

 

[html] view plaincopy

 

  1. <?xml version="1.0" encoding="utf-8"?>   
  2.      <LinearLayout   xmlns:android=""   
  3.       android:orientation="vertical"   
  4.       android:layout_width="fill_parent"    
  5.       android:layout_height="fill_parent"   
  6.      >   
  7.      <Button android:layout_height="wrap_content"    
  8.          android:layout_width="fill_parent"    
  9.          android:id="@+id/btnNDK"    
  10.          android:text="使用C++ OpenCV进行拍卖" />   
  11.      <Button android:layout_height="wrap_content"    
  12.          android:layout_width="fill_parent"    
  13.          android:id="@+id/btnRestore"    
  14.          android:text="还原" />    
  15.      <ImageView android:id="@+id/ImageView01"    
  16.      android:layout_width="fill_parent"    
  17.      android:layout_height="fill_parent" />         
  18.  </LinearLayout>  

在文书夹src下的com.testopencv.haveimgfun包中新建贰个类用于包装选拔了opencv c++代码的动态库的导出函数,类名叫LibImgFun。
Eclipse会为你创设三个新的文本LibImgFun.java,将里面包车型客车源委改为:

 

 

 

[java] view plaincopy

 

  1. package com.testopencv.haveimgfun;   
  2.  public class LibImgFun {    
  3.  static {     
  4.          System.loadLibrary("ImgFun");     
  5.         }     
  6.        /**  
  7.              * @param width the current view width  
  8.              * @param height the current view height  
  9.  */   
  10.      public static native int[] ImgFun(int[] buf, int w, int h);    
  11.  }  

从下边包车型客车代码能够识破,大家的动态库名字应为“libImgFun.so”,注意"public static native int[] ImgFun(int[] buf, int w, int h)"中的native关键字,注解那么些函数来自native code。static代表这是一个静态函数,那样就足以直接用类名去调用。

 

 

改过功效代码,改善HaveImgFun.java的代码,代码内容如下:

 

 

[java] view plaincopy

 

  1. package com.testopencv.haveimgfun;  
  2.   
  3. import android.app.Activity;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.Bitmap.Config;  
  6. import android.graphics.drawable.BitmapDrawable;  
  7. import android.os.Bundle;  
  8. import android.widget.Button;  
  9. import android.view.View;  
  10. import android.widget.ImageView;  
  11.   
  12. public class HaveImgFun extends Activity {  
  13.     /** Called when the activity is first created. */  
  14.     ImageView imgView;  
  15.     Button btnNDK, btnRestore;  
  16.   
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.activity_have_img_fun);  
  21.   
  22.         this.setTitle("使用NDK调换灰度图");  
  23.         btnRestore = (Button) this.findViewById(R.id.btnRestore);  
  24.         btnRestore.setOnClickListener(new ClickEvent());  
  25.         btnNDK = (Button) this.findViewById(R.id.btnNDK);  
  26.         btnNDK.setOnClickListener(new ClickEvent());  
  27.         imgView = (ImageView) this.findViewById(R.id.ImageView01);  
  28.         Bitmap img = ((BitmapDrawable) getResources().getDrawable(  
  29.                 R.drawable.lena)).getBitmap();  
  30.         imgView.setImageBitmap(img);  
  31.     }  
  32.   
  33.     class ClickEvent implements View.OnClickListener {  
  34.         public void onClick(View v) {  
  35.             if (v == btnNDK) {  
  36.                 long current = System.currentTimeMillis();  
  37.                 Bitmap img1 = ((BitmapDrawable) getResources().getDrawable(  
  38.                         R.drawable.lena)).getBitmap();  
  39.                 int w = img1.getWidth(), h = img1.getHeight();  
  40.                 int[] pix = new int[w * h];  
  41.                 img1.getPixels(pix, 0, w, 0, 0, w, h);  
  42.                 int[] resultInt = LibImgFun.ImgFun(pix, w, h);  
  43.                 Bitmap resultImg = Bitmap.createBitmap(w, h, Config.RGB_565);  
  44.                 resultImg.setPixels(resultInt, 0, w, 0, 0, w, h);  
  45.                 long performance = System.currentTimeMillis() - current;  
  46.                 imgView.setImageBitmap(resultImg);  
  47.                 HaveImgFun.this.setTitle("w:" + String.valueOf(img1.getWidth())  
  48.                         + ",h:" + String.valueOf(img1.getHeight()) + "NDK耗时"  
  49.                         + String.valueOf(performance) + " 毫秒");  
  50.             } else if (v == btnRestore) {  
  51.                 Bitmap img2 = ((BitmapDrawable) getResources().getDrawable(  
  52.                         R.drawable.lena)).getBitmap();  
  53.                 imgView.setImageBitmap(img2);  
  54.                 HaveImgFun.this.setTitle("使用OpenCV实行图像处理");  
  55.             }  
  56.         }  
  57.     }  
  58. }  

小心:这里由于不一致的项目名以致类名,大概在运营程序的时候唤醒有些类找不到,那就需求查阅AndroidManifest.xml那些文件了, AndroidMainfest.xml代码示例:

 

 

[html] view plaincopy

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android=""  
  3.     package="com.example.haveimgfun"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="18" />  
  10.   
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/AppTheme" >  
  16.         <activity  
  17.             android:name="com.example.haveimgfun.HaveImgFun"  
  18.             android:label="@string/app_name" >  
  19.             <intent-filter>  
  20.                 <action android:name="android.intent.action.MAIN" />  
  21.   
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.         </activity>  
  25.     </application>  
  26.   
  27. </manifest>  

上边的代码中内定了程序运转时索要实例化的类,

[html] view plaincopy

 

  1. android:name="com.example.haveimgfun.HaveImgFun"  

 

上边那句代码须要依据不一致的项目名称以至类名实行修正,有的时候候会晤世类找不到的乖谬提示。

 

 

 

    7)cat and sed tools

11.2 C++代码

 

在品种中新建叁个jni文件,用于放置该类型的具备cpp代码。
在jni文件夹下创建三个"ImgFun.cpp"的文本,内容改为下边所示:

 

[cpp] view plaincopy

 

  1. #include <jni.h>  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #include <opencv2/opencv.hpp>  
  5. using namespace cv;  
  6. IplImage * change4channelTo3InIplImage(IplImage * src);  
  7.   
  8. extern "C" {  
  9. JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(  
  10.         JNIEnv* env, jobject obj, jintArray buf, int w, int h);  
  11. JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(  
  12.         JNIEnv* env, jobject obj, jintArray buf, int w, int h) {  
  13.   
  14.     jint *cbuf;  
  15.     cbuf = env->GetIntArrayElements(buf, false);  
  16.     if (cbuf == NULL) {  
  17.         return 0;  
  18.     }  
  19.   
  20.     Mat myimg(h, w, CV_8UC4, (unsigned char*) cbuf);  
  21.     IplImage image=IplImage(myimg);  
  22.     IplImage* image3channel = change4channelTo3InIplImage(&image);  
  23.   
  24.     IplImage* pCannyImage=cvCreateImage(cvGetSize(image3channel),IPL_DEPTH_8U,1);  
  25.   
  26.     cvCanny(image3channel,pCannyImage,50,150,3);  
  27.   
  28.     int* outImage=new int[w*h];  
  29.     for(int i=0;i<w*h;i++)  
  30.     {  
  31.         outImage[i]=(int)pCannyImage->imageData[i];  
  32.     }  
  33.   
  34.     int size = w * h;  
  35.     jintArray result = env->NewIntArray(size);  
  36.     env->SetIntArrayRegion(result, 0, size, outImage);  
  37.     env->ReleaseIntArrayElements(buf, cbuf, 0);  
  38.     return result;  
  39. }  
  40. }  
  41.   
  42. IplImage * change4channelTo3InIplImage(IplImage * src) {  
  43.     if (src->nChannels != 4) {  
  44.         return NULL;  
  45.     }  
  46.   
  47.     IplImage * destImg = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);  
  48.     for (int row = 0; row < src->height; row++) {  
  49.         for (int col = 0; col < src->width; col++) {  
  50.             CvScalar s = cvGet2D(src, row, col);  
  51.             cvSet2D(destImg, row, col, s);  
  52.         }  
  53.     }  
  54.   
  55.     return destImg;  
  56. }  

在上头的代码中,给出了简要的Canny算子检查实验边缘的代码,並且重回检查实验后的图像显示。
上边的代码中#include <jni.h>是一定要含有的头文件,#include <opencv2/opencv.hpp>是opencv要包罗的头文件。

 

 

注释: 1. 

[cpp] view plaincopy

 

  1. JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(  
  2.         JNIEnv* env, jobject obj, jintArray buf, int w, int h)</span></span>  

 

 

本条函数名,必得与java代码中的包名以致类名,函数名完全生龙活虎致,

[cpp] view plaincopy

 

  1. Java_com_testopencv_haveimgfun_LibImgFun_ImgFun  

 

独家代表了包,类,函数名,中间用_告别,这些是老大重大的,否则会提示找不到函数的极度错误。

 

2.  eclipse很意外,恐怕是本身的陈设难点,笔者自然早就安插好了opencv的目录,不过只要不配置eclipse工程的蕴藏目录,是找不到opencv头文件的。

 

[cpp] view plaincopy

 

  1. #include <opencv2/opencv.hpp>  

 

那行代码,假设不配置eclipse工程中的包涵目录,找不到系统意况变量中的opencv目录,这几个只要各位有消除办法,还请多都赐教。

例如 给工程增添包括目录,只有加多了带有目录,才干找到呼应的头文件:

此处带有的头文件的目录不仅能是opencv4android的c++头文件目录,也得以是先前您早已陈设好的opencv目录

 

上边包车型地铁截图中,是本身的类型的配置,这里要求富含NDK中的若干流行版本的头文件,以至一些正经的c/c++的头文件,在那之中,规范的c/c++的头文件,会在将android项目转移为c/cpp项指标历程中自动抬高。请我们遵照本人的体系陈设甚至文件存放目录对应的改动。原本的配备表达中利用的版本都太古年龄大了。。。(上面第一张图是流行的计划截图,第二张图是本来的布置截图,放在那处仅供参考比较。卡塔 尔(英语:State of Qatar)

极其注意:所以的布局中,都要让你的品类找到opencv的jni的目录,那样手艺运用opencv的c/c++ 对应的头文件。

图片 13

图片 14

 

 

11.3 配置文件

下一场再在jni下新建多个文件"Android.mk"文件和"Application.mk"文件,那多少个文技巧实上正是简单的Makefile文件。
使用NDK进行编写翻译的时候,须求运用Android.mk和Application.mk四个文本。
Android.mk:

 

[html] view plaincopy

 

  1. LOCAL_PATH := $(call my-dir)    
  2. include $(CLEAR_VARS)    
  3. OPENCV_LIB_TYPE:=STATIC  
  4. ifeq ("$(wildcard $(OPENCV_MK_PATH))","")    
  5. #try to load OpenCV.mk from default install location    
  6. include E:javaOpenCV-2.4.5-android-sdksdknativejniOpenCV.mk   
  7. else    
  8. include $(OPENCV_MK_PATH)    
  9. endif    
  10. LOCAL_MODULE    := ImgFun  
  11. LOCAL_SRC_FILES := ImgFun.cpp    
  12. include $(BUILD_SHARED_LIBRARY)   

Application.mk:

 

 

[html] view plaincopy

 

  1. APP_STL:=gnustl_static    
  2. APP_CPPFLAGS:=-frtti -fexceptions    
  3. APP_ABI:=armeabi armeabi-v7a </span>  

在Android.mk文件中,要求器重校正的代码是之类后生可畏行:

 

 

[html] view plaincopy

 

  1. include E:javaOpenCV-2.4.5-android-sdksdknativejniOpenCV.mk  

此地要内定到opencv.mk那一个文件,不然在NDK拓宽编写翻译本地c/c++ 文件得时候会提示您找不到opencv.mk这几个文件。不用你把opencv.mk放到哪儿,只要用相对只怕相对目录加载进来就可以。

 

特别注意:这里鲜明要在Android.mk文件中隐含精确的opencv中的OpenCV.mk文件,因为这几个OpenCV.mk文件配置了何等使用opencv中的动态链接库。并且经过那个文件把opencv中的c/cpp的链接库文件复制到了android项目中,在anroid项目周转的时候手艺找到地点的native code对应的函数。也便是说,通过OpenCV.mk文件,在编写翻译当地c/cpp文件的时候才干找到地点c/cpp代码所使用的opencv函数的链接库。

 

唯独,因为小编此前是在Windows上作开采,所以混合使用native code和 opencv 的 java SDK是不曾难点的,不用手动copy opencv4android 的libopencv_java.so文件也能自动的把这一个文件复制过去,可是当前自家在ubuntu上布置的时候,发掘最大的二个难题正是当混合使用native code和java sdk的时候, 未有电动的给android项目增添libopencv_java.so那个库文件,何况当手动把公文添加到android项指标libs目录后NDK在 build本地代码的时候会自动把手动增加的库文件删了。。。WTF, 这些标题困扰了自家好久,也找了不菲素材,然则都不是太美好,最终依然看NDK的文书档案把难题一挥而就了,这里衷心不精通为何在Ubuntu下安顿利用opencv java SDK会至极,不会自动的复制.so文件。。。

 

脚下,仅仅使用native code无需关爱上边建议的主题素材,上边的主题素材会单独写三个blog给出解决措施。

 

 

下一场需求使用LOCAL_SRC_FILES包括须求编写翻译的文书。全数的c/c++ 文件都要分头列出来。

 

[html] view plaincopy

 

  1. LOCAL_MODULE    := ImgFun  

地点大器晚成行代码用来钦命生成的链接库的名目。

 

 

11.4 编写翻译本地C++代码

 

编写翻译本地C++代码能够选取Cygwin进行编写翻译,cd 到品种目录,然后运维ndk-build
也足以采用windows调整台实行编写翻译,相符cd到项目目录,运转ndk-build
还足以行使Eclipse进行编写翻译,建议配置使用Eclipse举行编写翻译,那样当项目标本土cpp代码发生变化的时候就足以兑现全自动的cpp代码编写翻译,不用每一趟都在命令行中手动的实行编写翻译,就算应用黑忽忽的命令行手动编写翻译,输出一堆消息显着很牛逼的标准。

(以下内容,假使运用cygwin进行编译,则无需张开操作,直接使用cygwin只怕命令行实行编写翻译,保障编写翻译通过之后就可以运路程序,假诺采取使用Eclipse自动举办编写翻译,则参谋以下内容实行布置卡塔 尔(英语:State of Qatar)

率先需求将该项目转移到C++项目,使得该品种具备C++代码属性,如下所述。
点击项目,右击,New -> Other -> C/C++ -> Convert to a C/C++ Project.

 

图片 15

 

图片 16

 

图片 17

 

配置Eclipse对cpp代码举办编写翻译:
先是须求给当下项目增进一个编写翻译意况变量
正如目录
open Eclipse menu Window -> Preferences -> C/C++ -> Build -> Environment,
点击Add... 
丰盛二个NDKROOT,并且设置值为NDK的根目录。
接下来设置编写翻译的局地参数
Project Properties -> C/C++ Build, uncheck Use default build command, replace “Build command” text from "make" to
"${NDKROOT}/ndk-build.cmd" on Windows,
"${NDKROOT}/ndk-build" on Linux and MacOS.

图片 18

 

接下来订正Behaviour选项卡,设置编写翻译配置(配置在保留代码的时候实行活动编写翻译卡塔尔:

 

图片 19

 

点击鲜明,然后确认NDK(ndk-build)编写翻译能够健康开展编译,
能够看见下图:

图片 20

 

本条时候,会在C++代码中,看到那三个多的不当提醒,四处都是大谬不然提醒,这里并不是慌,这里只是假的谬误提醒,编写翻译cpp代码能够编译通过,可是运路程序是可怜的,会唤醒您代码有不当,须要解决这么些难题。

 

图片 21

 

 

开发工程属性,Project Properties -> C/C++ General -> Paths and Symbols

为GNC C++编译器增多如下路径:(这里丰盛的路线便是NDK 中的c/c++ 头文件的门径卡塔尔国

 

 

[html] view plaincopy

 

  1. # for NDK r8 and prior:  
  2. ${NDKROOT}/platforms/android-9/arch-arm/usr/include  
  3. ${NDKROOT}/sources/cxx-stl/gnu-libstdc++/include  
  4. ${NDKROOT}/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include  
  5. ${ProjDirPath}/../../sdk/native/jni/include  

 

[html] view plaincopy

 

  1. # for NDK r8b and later:  
  2. ${NDKROOT}/platforms/android-9/arch-arm/usr/include  
  3. ${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include  
  4. ${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include  
  5. ${ProjDirPath}/../../sdk/native/jni/include  

 

然后就拜看到全体的一无是处都杳如黄鹤了,那样重复编写翻译本地cpp代码,然后就能够运维工程了。

 

注脚:下面的头文件配置路线都以相比较古老的了,最新的布局请看下图:

图片 22

 

 

终归可以运作程序了,可以见到本程序的截图如下:(由于接受的虚构机,所以运维速度非常慢卡塔尔

 

图片 23

 

图片 24

 

 

**************************************************************************************************************************************************************************************

注脚:上边的印证都以用的opencv  的c/c++版本的头文件以至代码,假设您用opencv4android中提供的例证,例子里面都用到opencv4android的java版本的API,那样你必要给工程布置Library,本事编写翻译通过,小编在前期的品尝中,都内定了API,但是一会API这些路线就形成叉叉了,后来发掘,eclipse中一定要把libray那几个工程投入进去,技能科学的加载library, 那样,你的eclipse必需把opencv4android中的Android版本的library那些工程加进去才得以。笔者用的opencv4android 2.4.6的本子, 这么些版本的library工程名叫OpenCV Library - 2.4.6,必得在eclipse中把这么些工程导入技艺够成功的引用opencv4android 的java版本SDK

持有的援用 import org.opencv.core.Rect; 这种类型的包的公文,都证实这几个工程蕴含了opencv4android的java版本的API,须要配备library.

与此同不常间还索要配置Android SDK 版本(不然编译提醒出错卡塔尔

图片 25

 

8.将 sciter.dll 移动到输出目录,就能够编写翻译运转

 

Q & A:

 

在博客商酌中,烦扰很几人的难题有:

 

1. 众三人关系了cbuf = env->GetIntArrayElements(buf, false); 编写翻译然则,那么些应该是NDK版本的标题,其实笔者也未尝留心去查资料,到底是什么样难点,同理可得把题目解决了就足以了,作者在重新配置的时候也碰到了这些标题,无非就是传播的参数和函数能够采纳的参数不宽容,那么给它传叁个匹配的就好了。

 

现行反革命改成了:
cbuf = env->GetIntArrayElements(buf, NULL);
那样就能够编写翻译通过了

 

  1. 生成SDK配置

    打开dos命令行, 定位到SDK目录:D:LibreOfficesdk,执行setsdkenv_windows.bat批管理公事,它用来配置SDK境况。当第二遍运维那一个批管理,它会必要您输入一些门路,配置步骤3安装工具的相应路线就可以。

    配置成功后:

    图片 26

  1. 生成LibreOffice SDK 头文件(C++)

    C++基于LO SDK的支付要求SDK所提供的C++头文件。

    D:LibreOfficesdkbin 目录下cppumaker.exe 工具。基于UNO组件的反射机制来生成这么些头文件。

    命令如下:

    D:LibreOfficesdkbin>cppumaker.exe -Gc -O "D:LibreOfficesdkinclude" "D:Lib reOfficeUREmisctypes.rdb" "D:LibreOfficeprogramtypesoffapi.rdb"。

 

  1. LibreOffice SDK中 D:LibreOfficesdkexamplescppDocumentLoaderDocumentLoader.cxx 例子剖析

    1卡塔尔VS新建win32 调整台应用程序

    2卡塔 尔(英语:State of Qatar)配置项目include目录:D:LibreOfficesdkinclude, lib目录:D:LibreOfficesdklib

    2卡塔 尔(阿拉伯语:قطر‎DocumentLoader.cxx源码拷贝到新建的连串中

    3卡塔尔国加多命令行参数-env:URE_MORE_TYPES="file:///D:/LibreOffice/program/types/offapi.rdb" "file:///D:/LibreOffice/sdk/examples/cpp/DocumentLoader/test.odt"

    图片 27

    4卡塔尔项目链接增多lib重视:Version.lib isal.lib isalhelper.lib icppu.lib icppuhelper.lib comsupp.lib

    图片 28

    5卡塔尔国运营项前段时间先运营Soffice进度,步向命令行窗体,再进来到相呼应目录运转soffice -accept=socket,host=localhost,port=2083;urp;StarOffice.ServiceManager

  图片 29

进而运转品种,马到功成!

本文由9159.com发布于操作系统,转载请注明出处:首先从官网下载最新的SDK,其它都是默认安装

关键词: