【问题标题】:Build NativeActivity using ndk-build使用 ndk-build 构建 NativeActivity
【发布时间】:2016-08-15 09:21:49
【问题描述】:

我试图在从 java 正常启动后启动本机活动(我需要加载另一个库,这就是我从 java 启动 NativeActivity 的原因)。

如何使用 Android.mk 构建示例?原始示例使用 gradle。我尝试构建它,但在启动时库无法加载。

FATAL EXCEPTION: main Process: sample.simple.com.myapplication, PID: 14917
 java.lang.RuntimeException: Unable to start activity ComponentInfo{sample.simple.com.myapplication/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/sample.simple.com.myapplication/lib/arm64/libnActivity.so

这是代码的sn-ps。

Android.mk 由关注http://brian.io/android-ndk-r10c-docs/Programmers_Guide/html/md_2__samples_sample--nativeactivity.html 制作的

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := nActivity
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

Java 活动

public class DummyActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

    System.loadLibrary("nActivity");
   Intent intent = new Intent(DummyActivity.this, android.app.NativeActivity.class);
   DummyActivity.this.startActivity(intent);

  //  setContentView(R.layout.activity_dummy);
}
}

Android 清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="display.rendering.simple.com.myapplication">

    <application android:label="@string/app_name" android:hasCode="true">
        <activity android:name="DummyActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="android.app.NativeActivity">
            <meta-data android:name="android.app.lib_name"
                android:value="nActivity" />
        </activity>
    </application>

</manifest>

build.gradle

ndk{
    moduleName ="nActivity"
}
sourceSets.main {
    jni.srcDirs = []
    jni.srcDir "src/main/libs"
}

谢谢

【问题讨论】:

    标签: android android-ndk native-activity


    【解决方案1】:

    您的 build.gradle 在此处禁用对 ndk-build 的内置调用:

    jni.srcDirs = []
    

    这意味着实际上没有构建本地库。没有库 -> 设备上没有具有匹配名称的库 -> loadLibrary 错误。

    您不一定需要使用 Android.mk 文件从 Java 启动本机活动。另一个NDK samples 记录了如何使用 build.gradle 构建和使用本机代码。 build.gradle file from hello-jni 是一个很好的起点。

    我建议您不要使用 Android.mk,除非您必须这样做,但如果您需要,NDK samples 会使用 Android.mk。

    【讨论】:

    • 谢谢,问题是我需要构建另一个具有本机活动的库。该库是使用 android.mk 构建的(该库是我制作的,所以我基本上需要本机活动 + 我的所有文件)我尝试在我的项目中添加本机活动。所以基本上我需要一种使用 android Mk 构建本机活动的方法,而且该库确实存在于它只是无法打开的 apk 中。
    • 构建后库在您的项目中的什么位置?
    • 在 /lib/arm64-v8a/ 文件夹中打开 apk。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多