Android studio NDK 開發

目錄結構java

src/
|-- main
|	|--java
|	|--jni
|   |  |--lib
|   |  |  |--arm64
|   |  |  |  |--libmodpdfium.so
|   |  |  |
|   |  |  |--armeabi-v7a
|   |  |  |  |--libmodpdfium.so
|   |  |  |
|   |  |  |--armeabi-v7a
|   |  |  |  |--libmodpdfium.so
|   |  |  |
|   |  |  |--x86
|   |  |    |--libmodpdfium.so
|   |  |  
|   |  |--mainJNILib.cpp
|   |  |--util.hpp
|   |  
|	|--jniLibs
|	|--res
|

Project的build.gradle文件android

buildscript {
	repositories {
		jcenter()
	}
	dependencies {
		classpath 'com.android.tools.build:gradle:2.2.2'
		classpath 'com.android.tools.build:gradle-experimental:0.8.2' // 增長
		classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
		classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
	}
}

allprojects {
	repositories {
		jcenter()
	}
}

Module的build.gradle文件git

apply plugin: 'com.android.model.library'

model{
	android {
		compileSdkVersion = 24
		buildToolsVersion = "24.0.2"

		defaultConfig {
			minSdkVersion.apiLevel 9
			targetSdkVersion.apiLevel 22
			versionCode 1
			versionName "1.4.0"
		}
	}
	android.ndk{
		moduleName "jniPdfium"   //生成的so名字
		abiFilters.addAll([ "arm64", "armeabi","armeabi-v7a", "mips", "x86", "x86_64"]) //會生成指定體系結構下的so庫
		ldLibs.addAll(["log", "android", "jnigraphics"])
		stl "stlport_static"
		cppFlags.add("-fexceptions")
		cppFlags.add("-DHAVE_PTHREADS")
	}

	android.buildTypes {
		release {
			minifyEnabled false
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
			proguardFiles.add(file("proguard-rules.txt"))
		}
	}

	// c文件依賴的so庫
	repositories {
		prebuilt(PrebuiltLibraries) {
			libmodpdfium{ // so庫文件名
				headers.srcDir "src/main/jni" // so庫的頭文件
				binaries.withType(SharedLibraryBinary) {
					sharedLibraryFile = file("src/main/jni/lib/${targetPlatform.getName()}/libmodpdfium.so") // so庫的位置
				}
			}
		}
	}

	android.sources {
		main{
			jni {
				dependencies { // c文件須要調用so庫的函數
					library "libmodpdfium"
				}
				source { // c文件的位置
					srcDirs "src/main/jni"
				}
			}
			jniLibs {
				source { // jniLibs位置
					srcDir "src/main/jniLibs"
				}
			}
		}
	}
}

dependencies {
	compile fileTree(dir: 'libs', include: ['*.jar'])
	testCompile 'junit:junit:4.12'
	compile 'com.android.support:support-v4:24.2.1'
}

參考:github

Experimental Plugin User Guide
http://tools.android.com/tech-docs/new-build-system/gradle-experimental

在Android Studio中使用NDK/JNI - 實驗版插件用戶指南
https://my.oschina.net/wolfcs/blog/550677
相關文章
相關標籤/搜索