Android StudioでCMakeを使うのはどんな体験ですか

2580 ワード

前回はAndroid StudioでのNDK利用がどのような体験なのかを記述しましたが、過程が煩雑で、多くの命令を覚える必要があるのが頭の痛いところです.前回SDKツールを更新したとき、リストの下にCMakeのオプションがあることに気づいた.名前から明らかにCに関連しているはずだと感じたが、C関数を書く方法があるのではないかと思った.そこでダウンロードして、ネット上で1回の乱れた息の后で、たぶん少し皮の毛を知っていて、その使い方の简単さを深く感じて、决してNDKの通常の使い方の比较することができるのではありませんて、大喜びして、覚えています.20170109
例demo転送ゲート------go------HelloCMake
1、構成
a)CMakeをダウンロードし、Android Studioでダウンロードすることが望ましい
File->Settings->Appearance&Behavior->System Settings->Android SDK->SDK Tools CMakeチェック
b)moduleの下にcppフォルダを新規作成し、.cppファイルを保存する.c)build.gradleを構成し、加入する
    defaultConfig{
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
  android{
        externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }
  }

d)cppファイルを作成main/java同級のcppフォルダの下でcppファイルを新規作成し、so-demo.cpp
e)CMakeLists.txtファイルの作成例は以下の通り
#CMake  
cmake_minimum_required(VERSION 3.4.1)
#   cpp  
add_library( so-demo SHARED src/main/cpp/so-demo.cpp )
#log
find_library( log-lib log )
#     so
target_link_libraries( so-demo ${log-lib} )

2、cppを書く
a)クラスの新規作成、cppメソッドの宣言、public native...キーワードnative
package amos.com.hellocmake.soutil;

/**
 * @author kuan.liang
 */
public class SoUtils {

    private static SoUtils instance = null;

    public static SoUtils getInstance(){
        if(null == instance){
            synchronized (SoUtils.class){
                if(null == instance){
                    instance = new SoUtils();
                }
            }
        }
        return instance;
    }
    //    
    public native String getStringFromJni();
}

b)cppを作成し、Android Studioをマウスでnative関数に移動し、Alt+Enterはスマートプロンプトを使用して関数を迅速に生成することができ、以下のようにextern"C"{}内に方法を置き、Cの形式でコードを作成する
#include 
#include 
extern "C"{
JNIEXPORT jstring JNICALL
Java_amos_com_hellocmake_soutil_SoUtils_getStringFromJni(JNIEnv *env, jobject) {
    std::string hello = "Say hello from JNI";
    return env->NewStringUTF(hello.c_str());
}
}

3、構築運行
まず生成したsoライブラリを参照し,適切にロードする必要がある.apkを構築する方法に従って構築を行い,直接run,Gradleなどを用いることもできる.
//            
System.loadLibrary("so-demo");

構築が完了し、build/intermediates/cmakeで対応するsoライブラリを取得し、他のエンジニアリングにコピーして使用できます.
4、終わり
CMakeを使用すると、Cの作成が大幅に難しくなり、構成が簡単になり、.hヘッダファイルをたくさん書かなくてもいいので、より優れた選択になります.ソースコードOSGitアドレス:Android NDK-HelloCMake