我正在创建一个Android库(.aar文件),我需要使用JNI。(如果可能的话,我很清楚谷歌不鼓励使用JNI/NDK,但在这种情况下,这是不可能的)。
我从一个独立的hello jni示例应用程序开始(首先学习jni),其中包含以下文件:
HelloJni.java
public class HelloJni extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText( stringFromJNI() );
setContentView(tv);
}
public native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
应用程序.mk
APP_ABI := all
你好,jni.c
#include <string.h>
#include <jni.h>
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI!");
}
以下构建良好的应用程序(apk),我能够在我的设备上运行它,它打印“Hello from JNI!”正如预期的那样。
现在,我做了同样的事情,但不是apk,而是建立了一个库项目来生成aar。除了HelloJni,我把所有的文件都保存了。java,我将其更改为:
HelloJni.java
public class HelloJni {
public native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}
}
aar构建得很好,但是当我将aar导入到一个单独的应用程序项目中,并尝试在我的设备上运行它时,它在应用程序启动时崩溃,我收到以下错误logcat消息:
com.test.sample。mysampleapplication E/AndroidRuntime﹕ 致命异常:主进程:com.test.sample。mysampleapplication,PID:20047 java.lang.UnsatifiedLinkError:dalvik.system。PathClassLoader[DexPathList[[zip file”/data/app/com.test.sample.mysampleapplication-1/base.apk“],nativellibrarydirectories=[/data/app/com.test.sample.mysampleapplication-1/lib/arm,/vendor/lib,/system/lib]]在java.lang.Runtime.loadLibrary(Runtime.java:366)在java.lang.system.loadLibrary(system.java:988)中找不到“libhello jni.so”。。。
这个“libhello-jni.so”文件到底是什么?我为什么需要它?作为一名apk,我能够很好地完成这项任务。但是,有谁能解释一下,当我把它制作成aar,并导入到应用程序项目中使用它时,为什么它不起作用?我是否遗漏了将其放入库(并使用)所需的其他步骤?谢谢
编辑:
这就是我将aar导入应用程序的方式。1、点击“文件”-
您必须使用Android ndk中的ndk build命令构建本机代码。
这个过程将生成linhello jni。因此,这将包括在您的构建中。
结果我不得不在我的构建中添加一些NDK配置。我的AAR模块目录中的gradle文件。
build.gradle:
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
// This determines the .so filename
ndk {
moduleName "hello-jni"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
没有在内部版本中添加。gradle将生成一个默认为项目名称的.so文件,在我的示例“libaar.so”中。使用上面的配置,生成的.so文件将是“libhello jni.so”。
我试图在我的codeigniter应用程序中包含甘特图。接下来的教程一是:https://docs.dhtmlx.com/tutorials__connector_codeigniter__step6.html 当我深入研究这个问题并直接点击控制器时,我发现了一个问题: Sub_文件夹是实际的项目文件夹,其中有复制粘贴dhtmlx、dhtmlxGantt和dhtmlxScheduler文件夹。我不
我在Ubuntu 14.04中安装了phpbrew以使用PHP5.4。它工作得很好,但当我尝试使用composer时除外,composer会忽略phpbrew并安装与PHP5.5相关的依赖项。 有没有办法强制composer与phpbrew config兼容?我试图在我的作曲家中添加:php:“5.4”。json,但是它说这个要求在我的php版本中是不可能的。
我是Micronaut框架的新手,我正在尝试使用entitymanager创建我的存储库。我这样创建了我的存储库 我使用这个类实现接口并注入entitymanager 问题是我一直有这个错误: PS:我已经启用了注释处理
我正在尝试将composer与我的WampServer一起使用。 我所有文件的路径都是,但当我运行composer时,它会将供应商文件和其他东西安装到其他地方。 我甚至不知道我的项目在哪里,我也不能改变我的项目在哪里的路径。我已经尝试了所有的方法,但它似乎仍然没有在我的项目文件夹中安装供应商文件。
API level 28和Google建议使用registerNetworkCallback(NetworkRequest,PendingIntent)不推荐CONNECTIVITY\u操作。 我尝试使用ConnectionManager注册了registerNetworkCallback。NetworkCallback和它的工作,但我想使用PendingContent。 让我困惑的是公共空寄存器
问题内容: 当我尝试将Webpack与简单的Express服务器一起使用时,总是会收到大量错误消息: express.js 我得到所有这些错误: 这是我的配置文件: 我该怎么办,我还需要在服务器端使用webpack。 我像这样运行express.js文件: 问题答案: 我最终要做的是,我使用了两种不同的配置,一种用于使用webpack将服务器内容打包在一起,另一种用于将所有浏览器内容打包在一起,并