草庐IT

Android-JNI

全部标签

java - Java 方法在抛出异常时返回给 JNI 调用者的是什么?

假设我有以下Java代码:publicclassTest{publicstaticintfoo(){thrownewRuntimeException();}}以通常的方式加载native库。native库注册并缓存JVM或其他任何内容,然后稍后执行此函数:JNIEnv*sEnv;//initialisedsomewhereproperlyvoidthrowMeARiver(){jclassc=sEnv->FindClass("Test");jmethodIDm=sEnv->GetStaticMethodID(c,"foo","()I");jinti=sEnv->CallStaticIn

java - 如何对JNI源码进行单元测试?

我正在寻找用于单元测试JNI源代码的工具或解决方案。到目前为止,我的搜索车还没有找到任何单元测试JNI代码的解决方案。我的选择是用java编写单元测试并进行native调用,验证返回值。这里的问题是我无法获得代码覆盖率报告。对native实现的调用将需要由nativestub实现进行模拟或支持。java测试代码(调用)--->DLL(JNI)中的native实现--->模拟/stubC++代码如果有任何可用的解决方案,请分享。 最佳答案 确实没有任何全面的工具可用于自动构建和测试JNI代码。我尝试做的是创建一个独立的native库,

java - 如何在 Android Studio 中编写波斯语?

我想在AndroidStudio中写波斯语,但是输入波斯语后,AndroidStudio显示一些奇怪的字符。当然3个月左右是对的,突然就奇怪了。 最佳答案 在androidstudio1.2中,您应该转到配置>设置>颜色和字体>字体>使用您的方案>取消选中仅显示等宽字体>最后使用tahoma字体并应用并确定。尽情享受吧!Instruction 关于java-如何在AndroidStudio中编写波斯语?,我们在StackOverflow上找到一个类似的问题:

java - "pure"gradle 中的 Gradle 产品 flavor (不是 android gradle)

我想用gradle为不同的客户构建一个java库。在“纯”gradle中是否有类似android产品口味的东西?谢谢。 最佳答案 答案是肯定的,但您将不得不使用新的Gradle软件模型,它正在孵化。这将是一条充满痛苦的道路,因为您将成为开拓者,因为我已经学会了将它用于C/Cpp项目。您的构建通常如下所示。plugins{id'jvm-component'id'java-lang'}model{buildTypes{debugrelease}flavors{freepaid}components{server(JvmLibrarySp

java - 在非 Android 应用程序上使用 LeakCanary

LeakCanary可以用在非Android应用上吗?例如,在JavaFx应用程序中? 最佳答案 简短的回答是不可以。LeakCanarydocumentationsite是这样说的:LeakCanary’sknowledgeoftheinternalsoftheAndroidFrameworkgivesitauniqueabilitytonarrowdownthecauseofeachleak,helpingdevelopersdramaticallyreduceOutOfMemoryErrorcrashes.据此,我们推断正是该

java - Xamarin.Android 绑定(bind)调用 java 对象方法

我通过名为Xamarin.GradleBinding的VisualStudio扩展创建了Java绑定(bind)库。我添加了ru.rambler.android:swipe-layout:1.0.14包,在使用它的SwipeLayout时,一切正常。但不幸的是,它没有创建相应的C#类或类似的东西。我尝试手动添加包,但仍然没有。我检查了sourceonGitHub.SwipeLayout有一个publicvoid方法reset()没有参数:publicvoidreset()我尝试使用JNIEnv从c#调用此方法。IntPtrtype=JNIEnv.FindClass("ru/ramble

java - 通过 log4j 发送 JNI C stderr/stdout

我的java应用程序使用JNI调用用C编写的库。这个native库将错误记录到stderr,但我想通过我的log4j记录器以某种方式重定向错误流。这可能吗?C库是外部的-我没有源代码,所以无法更改它。谢谢 最佳答案 注意:我没有尝试过这个答案;YMMV.POSIX方法freopen将更改与流关联的基础文件。正如联机帮助页所述:“freopen()函数的主要用途是更改与标准文本流(stderr、stdin或stdout)关联的文件”。因此,您可以创建自己的JNI库,它只需将流重定向到一个文件中。但是,要使这项工作有几个严重的障碍:您需

java - JNI 调用与常规 Java 调用交错 - 执行顺序是什么?

我最近一直在试验JNI,以便移植一些现有的C++库。作为测试的一部分,我创建了一个简单的“helloworld”程序。我在C++中调用一个简单的native函数,它只打印消息。我对我在执行程序时观察到的一些行为有点好奇——似乎所有native函数消息/响应都是在JavaSystem.out.print之后打印的。这是因为native调用是在Java调用之后执行的,还是我应该忽略此行为?publicstaticvoidmain(String[]args){HelloWorldapp=newHelloWorld();System.out.println("say");app.print()

java - WebRTC 原生 java/android

我能够在Android上构建libjingle库并构建AppRTCDemo应用程序。我能够连接到同行并成功共享音频和视频。现在我想扩展它来发送数据(比如文本“HelloWorld”)。我想将DataChannel集成到其中,以便我也可以通过它发送数据。我有几个问题:是否可以将DataChannel与原生webrtc一起使用?我的意思是我正在尝试做的事情是否受支持?是否有任何示例应用程序或示例可以为我解决这个问题?期待您的支持! 最佳答案 是的,它受支持。有关确切接口(interface)的更多信息,请查看/talk/app/webr

java - Proguard 在非 Android 项目中使用 Gradle 的问题

我正在尝试使用Proguard混淆我的Java项目的代码。该项目已在Intellij上创建,并使用Gradle2.2.1配置。我工作的电脑上有代理,所以Intellij无法上网。我花了几个小时来寻找一个简单的例子来混淆我的代码。我试过:taskproguardTask(type:proguard.gradle.ProGuardTask){println"ha"}taskproguardTask(type:proguard.gradle.ProGuardTask)我每次都遇到异常:FAILURE:Buildfailedwithanexception.*Whatwentwrong:Exec