android ndk 开发

Posted Yingshirun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android ndk 开发相关的知识,希望对你有一定的参考价值。

使用android studio2.0进行ndk开发

首先

1、distributionUrl=https\\://services.gradle.org/distributions/gradle-2.10-all.zip


2

classpath "com.android.tools.build:gradle-experimental:0.6.0-beta5"

3、gradle文件修改
gradle文件内容:
apply plugin: 'com.android.model.application'
model 
    android 
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"

        defaultConfig 
            applicationId "com.shirun.jni"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 23
        
        buildTypes 
            release 
                minifyEnabled = false
                proguardFiles.add(file('proguard-rules.txt'))
            
        
    
    android.ndk
            moduleName = "myJni"
    
    android.productFlavors 
        create("arm") 
            ndk.abiFilters.add("armeabi")
        
        create("arm7") 
            ndk.abiFilters.add("armeabi-v7a")
        
        create("arm8") 
            ndk.abiFilters.add("arm64-v8a")
        
        create("x86") 
            ndk.abiFilters.add("x86")
        
        create("x86-64") 
            ndk.abiFilters.add("x86_64")
        
        create("mips") 
            ndk.abiFilters.add("mips")
        
        create("mips-64") 
            ndk.abiFilters.add("mips64")
        
        // To include all cpu architectures, leaves abiFilters empty
        create("all")
    


dependencies 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'

4、在APP目录下右击新建jni目录

5、新建一个类,进行加载jni

6.生成c文件

可以看到在jni下生成了myJni.c文件,文件内容就一个include  

7.生成.h头文件
在工具栏点击Build->Make Project
然后在项目的main目录下输入命令 javah -d jni -classpath D:\\Android\\sdk\\platforms\\android-23.android.jar;..\\..\\build\\intermediates\\classes\\all\\debug com.shirun.jni.MyJni

然后可以看到自己的jni目录下多了个.h的头文件

8、然后将我们的myJni.c文件稍作修改

 
9、在main中运行:
public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tv);
        MyJni myJni = new MyJni();
        tv.setText(myJni.getString("sdd"));
    
效果:

10。最后说一下我们生成的.so库的位置,如果拿错了.so类库,在别的地方是用不了的,当初在这个坑里躺了几个小时.......
 

 
参考资料:
http://www.jianshu.com/p/7844aafe897d
 
 

以上是关于android ndk 开发的主要内容,如果未能解决你的问题,请参考以下文章

android开发,怎么使用ndk编译成.so文件

Android NDK 开发Android NDK 下载 ( 下载指定历史版本 NDK | Android NDK r10e - 2015 年 5 月 )

Eclipse下搭建Android的NDK开发环境

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段

Android NDK开发基础

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | 使用 Makefile 构建 Android 平台 NDK 应用 )(代码