标签: android-ndk

在Android中从c ++调用java方法

我正在尝试从C++获取一个简单的Java方法调用,而Java调用本机方法.这是Java代码:

public class MainActivity extends Activity {
    private static String LIB_NAME = "name";

    static {
        System.loadLibrary(LIB_NAME);
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = (TextView) findViewById(R.id.textview);
        tv.setText(this.getJniString());
    }

    public void messageMe(String text) {
        System.out.println(text);
    }

    public native String getJniString();
}
Run Code Online (Sandbox Code Playgroud)

我试图messageMegetJniString*从Java到本机的方法调用过程中从本机代码调用方法.

native.cpp:

#include <string.h>
#include <stdio.h>
#include <jni.h>

jstring Java_the_package_MainActivity_getJniString( JNIEnv* env, jobject obj, jint depth ){

//    JavaVM *vm;
//    JNIEnv *env; …
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface android android-ndk

88
推荐指数
2
解决办法
10万
查看次数

将Android Studio更新到版本1.3.0后,我得到"NDK集成在当前插件中已弃用"错误

我在3天之前将Android Studio更新为1.3.0版.

在此之前,我可以使用NDK,现在我收到错误,如,

错误:(50,0)错误:当前插件中不推荐使用NDK集成.考虑尝试新的实验插件.有关详细信息,请参阅http://tools.android.com/tech-docs/new-build-system/gradle-experimental.在gradle.properties中设置"android.useDeprecatedNdk = true"以继续使用当前的NDK集成.

我在项目级别找不到文件gradle.property.

我该如何解决这个错误?

android deprecated android-ndk android-studio

88
推荐指数
1
解决办法
7万
查看次数

在Android上运行Node.Js.

所以我知道这已经受到了很多质疑.准确地说,例如在这些问题中:

  1. 在Android中运行NodeJs服务器
  2. 如何在android上运行我的node.js项目?
  3. IOS/Android上的NodeJS

提出的每个选项都存在问题:

  • 我想在我的普通设备上运行它,所以我想避免在我的设备上安装另一个操作系统

  • JXCore的工作在上个月停止了(也许是因此)我无法编译(参见无法安装jxcore-cordova)

  • NodeJs Anode的Android端口自2014年以来一直没有开发过,当时并没有真正维护过
  • 在我提到的第二个帖子中的第二个答案提到Android现在有一个官方节点分发,但除了最新dist浏览网站的链接我找不到任何关于如何实际使用它的信息
  • 我也看到了这个,但似乎设备必须连接到PC(或类似)才能运行adb shell命令,而我想将它作为一个单独的App

随着这些问题发布以来的时间以及作为"最佳选择"的JXCore似乎现在无法使用:
有没有办法在Android设备上运行node.js应用程序(在我的情况下是服务器)?

如果你想知道为什么我想要这个:我用Node.Js服务器创建了一个WebApp,现在我想要一个你可以从手机本地启动的版本而不需要互联网连接.这意味着服务器需要在Android手机上运行.

android android-ndk node.js cordova jxcore

85
推荐指数
4
解决办法
11万
查看次数

Android NDK C++ JNI(没有找到本机的实现...)

我正在尝试使用带有C++的NDK,并且似乎无法使方法命名约定正确.我的原生方法如下:

extern "C" {
JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni
(JNIEnv* env, jclass c)
{
   //
}
}
Run Code Online (Sandbox Code Playgroud)

标题包含在extern"C"{} aslo中.

一切编译都很好,创建一个.so文件并复制到我的项目下的libs文件夹,但是当我在Eclipse中调试并运行时,我不断收到"没有找到本机的实现......"的日志cat消息.因为所有NDK示例都在C中,我有什么遗漏吗?

谢谢.

android android-ndk

84
推荐指数
6
解决办法
9万
查看次数

是什么导致'SIGILL'信号?

我正在使用NDK和GCC将一些C++代码移植到Android.代码基本上运行.有一次,在Eclipse中调试时,调用

__CODE__

导致此错误:

__CODE__

那是什么意思?编译器是否因某种原因生成了非法代码?我在构造函数中有一个断点(它什么都不做),而且它没有被击中.我已经做了完整的重建.

我可能做错什么导致这个问题?

c++ android porting android-ndk

83
推荐指数
5
解决办法
10万
查看次数

Android NDK中不能包含像vector这样的C++标头

当我尝试在我的Android NDK项目中包含任何类似矢量的C++类时(使用最新的NDK r5b),我得到如下错误...

Compile++ thumb : test-libstl <= test-libstl.cpp /Users/nitrex88/Desktop/Programming/EclipseProjects/STLTest/jni/test-libstl.cpp:3:18: error: vector: No such file or directory

在线报道此问题的其他人通过添加声称成功

APP_STL := stlport_static

到他们的Application.mk文件.我已经完成了这个,并尝试了APP_STL的所有其他可能的值.我已经清理到项目,运行ndk-build干净,删除了obj和libs文件夹,仍然在我编译它时找不到矢量类.我已经在这个问题上工作了好几个星期(自NDK r5问世以来),如果有人有任何建议,我会非常感激.谢谢!

android stl vector android-ndk

82
推荐指数
4
解决办法
10万
查看次数

Android AudioRecord强制另一个流到MIC音频源

更新3:我与另一位开发人员合作,我们似乎找到了一个可以为一大笔钱做这件事的人.他们给我们发了一个测试apk,它似乎工作.我们将继续购买该来源.我希望我们不会被骗.我发现后我会更新

更新2:仍在努力.在经历了更多痛苦的日子后,我现在认为没有任何花哨的事情发生,但他们只是在原生方使用AudioFlinger(请参阅链接)来调用AudioFlinger :: setParameters

我现在正在寻找如何编写一个简单的JNI来调用AudioFioger :: setParameters with audio_io_handle_t ioHandle,const String8&keyValuePairs

我知道keyValuePairs可以是什么,但不是关于audio_io_handle_t的线索

更新:我现在相信其他应用可能正在使用QF音频与CAF.请参阅链接上的 audio_extn_utils_send_audio_calibration

链接中的 voice_get_incall_rec_snd_device 相同

我没有C/++知识.我怎样才能知道我是否可以从原生方面调用这些方法?由于其他应用程序可以,必须有一种方法.


我每天至少要工作5-6个小时,一直在努力奋斗40天.我不确定是否允许这样做,但我很乐意为正确答案捐款.

我有一个使用VOICE_CALL音频源的通话录音应用程序.尽管ASOP没有实现/授权,但大多数制造商已经实施了VOICE_CALL,使用VOICE_CALL音频源的应用在许多设备上运行良好.那是直到Android 6.

谷歌改变了Android 6的这种行为.现在打开VOICE_CALL音频源需要android.permission.CAPTURE_AUDIO_OUTPUT,它只被授予系统应用程序.

这基本上会停止通话记录,或者它应该有.好吧,它确实为我和200多个其他通话录音应用程序,除了3个已找到解决此限制的方法.

我一直在使用Android 6在许多不同的手机上尝试这些应用程序,并在他们设法记录的方式中发现了某些特征.

他们都使用Android AudioRecord类并打开MIC音频源.我也做; 但在我的应用程序中,我只从MIC而不是另一方获得音频.我发现的是告诉我他们在开始录制之前或之前发出了某种系统调用.

看一下成功记录VOICE_CALL的应用程序之一的以下日志形式,即使它使用MIC进行记录.看起来应用程序是如何管理混合/路由/流/合并VOICE_CALL音频源到MIC.

- D/audio_hw_primary: in_set_parameters: enter: kvpairs=input_source=1;routing=-2147483644
- D/PermissionCache: checking android.permission.MODIFY_AUDIO_SETTINGS for uid=10286 => granted (432 us)
- D/audio_hw_primary: in_set_parameters: enter: kvpairs=input_source=4;routing=-2147483584;format=1
- D/audio_hw_primary: select_devices: out_snd_device(0: ) in_snd_device(283: voice-dmic-ef)
- D/hardware_info: hw_info_append_hw_type : device_name = voice-dmic-ef
- D/voice: voice_get_incall_rec_snd_device: in_snd_device(283: …
Run Code Online (Sandbox Code Playgroud)

c java android android-ndk qualcomm

81
推荐指数
1
解决办法
6404
查看次数

在我的情况下,System.loadLibrary(...)找不到本机库

我想使用来自另一个 Android项目的现有本机库,所以我只是将NDK构建库(libcalculate.so)复制到我的新Android项目中.在我的新Android项目中,我创建了一个文件夹libs/armeabi/并将libcalculate.so放在那里.有没有 JNI /文件夹.我的测试设备有ARM架构.

在我的java代码中,我通过以下方式加载库:

  static{
    System.loadLibrary("calculate");
  }
Run Code Online (Sandbox Code Playgroud)

当我运行我的新Android项目时,我收到错误:

java.lang.UnsatisfiedLinkError:  ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Run Code Online (Sandbox Code Playgroud)

所以,正如错误所说,复制的本机库不在/ verdor/lib或/ system/lib中,如何在我的情况下解决这个问题?

(我解压缩了apk包,在lib /下有libcalculate.so)

==== UPDATE =====

我还尝试在项目根目录下创建一个jni /文件夹,并在jni /下添加一个Android.mk文件.Android.mk的内容是:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

然后,在项目根目录下,我执行了ndk-build.之后,armeabi /和armeabi-v7a /目录由ndk-build生成(文件夹中有libcalculate.so).

然后我运行我的maven成功构建项目.在最终的apk包中,有:

lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的应用程序时,同样的错误抛出:

java.lang.UnsatisfiedLinkError:  ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Run Code Online (Sandbox Code Playgroud)

android android-ndk

80
推荐指数
8
解决办法
11万
查看次数

适用于初学者的Android NDK教程/指南.

我从android NDK开始.是否有一些好的地方/电子书来指导我?谢谢

java android android-ndk

79
推荐指数
4
解决办法
8万
查看次数

什么是Android原生开发套件(NDK)?

我想了解NDK.什么是Android NDK(本机开发工具包)?怎么用呢?为什么要使用它?

android android-ndk

77
推荐指数
4
解决办法
8万
查看次数