• Cmake编写JNI


     调用两个库

    CMakeLists.txt

    //把那种大段的注释去掉了
    cmake_minimum_required(VERSION 3.4.1)
    
    
    add_library( # Sets the name of the library.
                 native-lib
    
                 # Sets the library as a shared library.
                 SHARED
    
                 # Provides a relative path to your source file(s).
                 src/main/cpp/native-lib.cpp )
    
    add_library( # Sets the name of the library.
                 nativeSecond-lib
    
                 # Sets the library as a shared library.
                 SHARED
    
                 # Provides a relative path to your source file(s).
                 src/main/cpp/nativeSecond-lib.cpp )
    
    find_library( # Sets the name of the path variable.
                  log-lib
    
                  # Specifies the name of the NDK library that
                  # you want CMake to locate.
                  log )
    
    target_link_libraries( # Specifies the target library.
                           native-lib
    
                           # Links the target library to the log library
                           # included in the NDK.
                           ${log-lib} )
    
    target_link_libraries( # Specifies the target library.
                         nativeSecond-lib
    
                         # Links the target library to the log library
                         # included in the NDK.
                         ${log-lib} )

    native-lib.cpp

    #include <jni.h>
    #include <string>
    
    extern "C"
    JNIEXPORT jstring
    
    JNICALL
    Java_com_example_aplex_cantest_MainActivity_stringFromJNI(
            JNIEnv *env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        return env->NewStringUTF(hello.c_str());
    }

    nativeSecond-lib.cpp

    #include <jni.h>
    #include <string>
    
    extern "C"
    JNIEXPORT jstring
    
    JNICALL
    Java_com_example_aplex_cantest_MainActivity_stringFromJNI22(
            JNIEnv *env,
            jobject /* this */) {
        std::string hello = "Hello Second from C++";
        return env->NewStringUTF(hello.c_str());
    }

    MainActivity.java

    package com.example.aplex.cantest;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        // Used to load the 'native-lib' library on application startup.
        static {
            System.loadLibrary("native-lib");
            System.loadLibrary("nativeSecond-lib");
        }
        Button bt;
        TextView tv;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Example of a call to a native method
            tv = (TextView) findViewById(R.id.sample_text);
            tv.setText(stringFromJNI());
    
    
            bt = (Button)findViewById(R.id.bt);
            bt.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    tv.setText(stringFromJNI22());
                }
            });
        }
    
        /**
         * A native method that is implemented by the 'native-lib' native library,
         * which is packaged with this application.
         */
        public native String stringFromJNI();
        public native String stringFromJNI22();
    }

  • 相关阅读:
    枚举和字符串之间的转换 [转帖]
    escape,encodeURI,encodeURIComponent函数比较[转帖]
    .net中的Provider模式 [转帖]
    ogg转到mp3
    四季养生(樊正伦教授)
    JavaScript高阶之路
    Python初识
    理解error和exception之间的区别(转)
    一些有用的话
    《爱在雨季》片尾曲
  • 原文地址:https://www.cnblogs.com/maogefff/p/8311140.html
Copyright © 2020-2023  润新知