美文网首页
Android Studio下Jni开发简单demo

Android Studio下Jni开发简单demo

作者: 老实的程序员 | 来源:发表于2016-08-16 13:36 被阅读0次

    开发环境:

    Android studio2.0
    ndk r10 64位

    准备工作:

    NDK下载地址:http://www.cnblogs.com/yaotong/archive/2011/01/25/1943615.html
    Android Studio下载地址:http://www.android-studio.org/
    新建Android工程;
    配置ndk路径,File>Project Structure
    工程目录:
    QQ截图20160816114035.jpg

    步骤一:

    打开File>Settings>Tools>External Tools
    点击“加号”添加javah命令行,如图:


    步骤二:

    创建JniTest.class,代码如下

    /**
    * Created by h0nes1pr09rammer on 2016/8/16.
    */
    public classJniTest {
    static{
    System.loadLibrary("jni-test");
    }
    public static nativeStringgetStrFromJni();
    }
    

    步骤三:

    在main目录下新建jni目录,右键JniTest.class,选中NDK>javah,jni中生成“包名_JniTest.h”

    步骤四:

    编写jni-test.c,代码如下:

    #include"com_ctwl_lzq_hellojnidemo_JniTest.h"
    JNIEXPORT jstring JNICALL Java_com_ctwl_lzq_hellojnidemo_JniTest_getStrFromJni(JNIEnv * env,jobject obj){
    char* cstr ="jni test";
    return(*env)->NewStringUTF(env,cstr);
    }
    

    步骤五:

    配置app下build.gradle,添加如下配置

    buildTypes {
    release {
    ...
    ndk{
    moduleName"jni-test"//生成的so名字
    abiFilters"armeabi","armeabi-v7a","x86"//输出指定三种abi体系结构下的so库。
    }
    }
    debug{
    ndk{
    moduleName"jni-test"//生成的so名字
    abiFilters"armeabi","armeabi-v7a","x86"//输出指定三种abi体系结构下的so库。
    }
    }
    }
    

    makeproject,在app>build>intermediates>ndk下生成对应的.so文件。

    步骤六:

    修改MainActivity.class代码,如下:

    public classMainActivityextendsAppCompatActivity {
    @Override
    protected voidonCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      TextView textView = (TextView) findViewById(R.id.tv);
      JniTest jniTest =newJniTest();
      textView.setText(jniTest.getStrFromJni());
      }
    }
    

    运行。

    报错:

    Error:Execution failed for task ':app:compileDebugNdk'.

    Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental.
    Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.

    解决办法:

    在gradle.properties中添加

    android.useDeprecatedNdk=true

    报错:

    Error:Execution failed for task ':app:compileDebugNdk'.

    com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: ... finished with non-zero exit value 2

    解决办法:

    在jni目录下新建空的.c文件,比如"empty.c"(具体原因自行google)。

    报错:

    java.lang.UnsatisfiedLinkError

    解决办法:

    在gradle中指定jniLibs路径,示例如下(根据自己的实际路径配置):

    sourceSets {    
    main {        
    manifest.srcFile 'AndroidManifest.xml'        
    java.srcDirs = ['src']        
    resources.srcDirs = ['src']        
    aidl.srcDirs = ['src']        
    renderscript.srcDirs = ['src']        
    res.srcDirs = ['res']        
    assets.srcDirs = ['assets']        
    jniLibs.srcDirs = ['libs']    
    }
    

    相关文章

      网友评论

          本文标题:Android Studio下Jni开发简单demo

          本文链接:https://www.haomeiwen.com/subject/aqjpsttx.html