今日长缨在手,何时缚住苍龙。这篇文章主要讲述关于Android SDK本机方法相关的知识,希望能为你提供帮助。
【关于Android SDK本机方法】android SDK的StaticLayout.java
(在android.text
包中)文件中定义了许多本机方法,如下所示:
private static native long nNewBuilder();
...private static native int nComputeLineBreaks(long nativePtr, LineBreaks recycle,
int[] recycleBreaks, float[] recycleWidths, int[] recycleFlags, int recycleLength);
然后我开始搜索那些本地方法here,我找到了那些C ++代码。以原生函数
nComputeLineBreaks
为例,在/frameworks/base/core/jni/android_text_StaticLayout.cpp
文件中有一个方法,如:static jint nComputeLineBreaks(JNIEnv* env, jclass, jlong nativePtr,
// Inputs
jcharArray javaText,
jlong measuredTextPtr,
jint length,
jfloat firstWidth,
jint firstWidthLineCount,
jfloat restWidth,
jintArray variableTabStops,
jint defaultTabStop,
jint indentsOffset,...)
在我看来,
StaticLayout
依靠本机方法来完成一些繁重的任务,但我不明白的是如何调用这些本机方法,这是否意味着,例如,如果我们有一个定义的本机方法像static jint sayHello(JNIEnv* env, jclass)
这样的Android框架可以通过我的Android应用程序直接通过在我的java类中定义一个方法来调用,如private static native int nSayHello();
?答案不,因为JNI基于类,而不仅仅是方法名称。所以
nComputeLineBreaks()
可以被android.text.StaticLayout
调用,但不能被其他类调用。这不是框架所特有的。这是标准的JNI行为。
推荐阅读
- Android Studio JNI(无法编译JPEG c库)
- Android - 在使用WebRTC发送到Wowza Streaming Engine之前旋转视频帧
- 如何在android studio项目中包含共享库()
- 本文教你处理u盘插上没反应
- 金士顿U盘修好工具推荐
- 本文教你安装usb无线网卡
- 本文教你U盘写保护怎样处理
- 本文教你U盘病毒怎样办
- 圆满者U盘维护系统推荐