Skip to content

Latest commit

 

History

History
90 lines (72 loc) · 3.46 KB

AndroidStudio中进行ndk开发.md

File metadata and controls

90 lines (72 loc) · 3.46 KB

AndroidStudio中进行ndk开发

  • 创建工程,声明native方法。

     private native void startDaemon(String serviceName, int sdkVersion);
    
     static {
         System.loadLibrary("daemon");
     }
  • 生成class文件。
    执行Build-Make Project命令,生成class文件。所在目录为app_path/build/intermediates/classes/debug

  • 执行javah生成.h文件

     C:\Users\Administrator>javah -help
     用法:
       javah [options] <classes>
     其中, [options] 包括:
       -o <file>                输出文件 (只能使用 -d 或 -o 之一)
       -d <dir>                 输出目录
       -v  -verbose             启用详细输出
       -h  --help  -?           输出此消息
       -version                 输出版本信息
       -jni                     生成 JNI 样式的标头文件 (默认值)
       -force                   始终写入输出文件
       -classpath <path>        从中加载类的路径
       -cp <path>               从中加载类的路径
       -bootclasspath <path>    从中加载引导类的路径
    

    Studio Terminal中进入到src/main目录下执行javah命令:
    javah -d jni -classpath <SDK_android.jar>;<APP_classes> <class>

    F:\DaemonService\app\src\main>javah -d jni -classpath C:\develop\android-sdk-windows\platforms\android-22\android.jar;..\..\build\intermediates\classes\debug com.charonchui.daemonservice.service.DaemonService 执行完成后就会在src/main/jni目录下生成com_charonchui_daemonservice_service_DaemonService.h文件。

  • module/src/main/jni目录下创建对应的.c文件。

  • 配置ndk路径,在项目右键Moudle Setting中设置。
    image

  • build.gradle中配置ndk选项

    android {
    	compileSdkVersion 23
    	buildToolsVersion "23.0.1"
    
    	defaultConfig {
    		applicationId "com.charonchui.daemonservice"
    		minSdkVersion 8
    		targetSdkVersion 23
    		versionCode 1
    		versionName "1.0"
    
    		ndk {
    			moduleName "uninstall_feedback" // 配置so名字
    			ldLibs "log"
    //            abiFilters "armeabi", "x86"  // 默认就是全部的,加了配置才会生成选中的
    		}
    	}
    	buildTypes {
    		release {
    			minifyEnabled false
    			proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    		}
    	}
    }

    这里可能会出现错误:

    • 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: Process 'command 'E:\android-ndk-r10\ndk-build.cmd'' finished with non-zero exit value 2 解决方法就是在jni目录建一个任意名字的.c`空文件就可以了。

  • 执行Build
    然后就可以在app/build/intermediates/ndk/debug/obj/local下看到所有架构的so了。 image