1.将需要引入的so包放入libs目录下。
2.需要build.gradle文件
android {
compileSdkVersion 28
...
defaultConfig {
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
...
ndk {
//设置支持的SO库架构
abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs'] // <- - Set your folder here!
assets.srcDirs = ['src/main/assets', 'src/main/assets/']
jni.srcDirs = []
}
}
}
3.调用so文件
public class Masker {
static {
System.loadLibrary("graphics");
}
private final int height;
private long nativeInstance;
private final int width;
private native void finalizer(long j);
private native void native_clear(long j);
private native void native_getMaskRect(long j, Rect rect);
private native long native_init(Bitmap bitmap);
private native long native_mask(long j, int i, int i2);
private native void native_reset(long j);
private native void native_upload(long j);
public Masker(Bitmap src) {
this.width = src.getWidth();
this.height = src.getHeight();
this.nativeInstance = native_init(src);
}
public long uploadMask(int x, int y) {
if (x < 0 || x > this.width || y < 0 || y > this.height) {
return 0;
}
long pixels = native_mask(this.nativeInstance, x, y);
native_upload(this.nativeInstance);
return pixels;
}
public void upload() {
native_upload(this.nativeInstance);
}
public Rect getMaskRect() {
Rect out = new Rect();
native_getMaskRect(this.nativeInstance, out);
return out;
}
public void reset() {
native_reset(this.nativeInstance);
}
public void clear() {
native_clear(this.nativeInstance);
}
public void destroy() {
try {
finalizer(this.nativeInstance);
this.nativeInstance = 0;
} catch (Exception e) {
}
}
protected void finalize() throws Throwable {
try {
finalizer(this.nativeInstance);
this.nativeInstance = 0;
} finally {
super.finalize();
}
}
}
网友评论