在 AIX 6.1 ppc64 上,为了加载 libm.a,我们的应用程序使用System.loadLibrary("m"). 或者它失败并显示错误消息
模块的幻数无效
根据 IBM 文档,当 32 位和 64 位二进制文件不匹配时,就会发生这种情况。或者,无论我们使用 Java6(32 位)还是 Java6_64(64 位)JVM,都会发生这种情况。所以情况并非如此。
另一个可能的原因是/usr/lib/libm.a不是共享库。但是我们就是libm.a在平台上找不到共享模式来使用!
根据 Javadoc,在 System.loadLibrary("name") 中,“name”到真实库的映射是系统相关的。在大多数 Unix 系统上,它被映射到 lib.so,而在 AIX 上,它被映射到 lib.a ;请注意,在 AIX 上,.a 可以是混合的,即。它可以包含静态和共享对象,32 位和 64 位对象。我的问题是在 AIX 上找到共享模式 libm.a。
有谁知道如何使用System.loadLibrary("m")加载一个libm.a?
PS
System.loadLibrary("m")在我们测试过的大多数 UNIX 平台上运行良好。
我正在寻找一种将 Surface(本机窗口)对象分配给显示器的方法,以便提交到该本机窗口的缓冲区将呈现到该特定显示器而不是主显示器。我想在本机代码中做到这一点。
在 Java 中,可以通过使用 Presentation API 来完成。
在本机代码中,我尝试调用SurfaceComposerClient::setDisplaySurface(),将显示IBinder对象(由 返回SurfaceComposerClient::getBuiltInDisplay())和IGraphicBufferProducer对象(由返回)传递给它Surface::getIGraphicBufferProducer()。问题是显示变为空白,即使我将缓冲区提交到本机窗口,也没有显示任何内容。
如果我不调用SurfaceComposerClient::setDisplaySurface(),则本机窗口将呈现到主显示器。
示例代码:
sp<IBinder> display(SurfaceComposerClient::getBuiltInDisplay(1));
SurfaceComposerClient::getDisplayInfo(display, &displayInfo);
surfaceControl = surfaceComposerClient->createSurface(String8(""), displayInfo.w, displayInfo.h, HAL_PIXEL_FORMAT_RGB_565);
sp<Surface> surface = surfaceControl->getSurface();
sp<IGraphicBufferProducer> iGraphicBufferProducer = surface->getIGraphicBufferProducer();
SurfaceComposerClient::setDisplaySurface(display, iGraphicBufferProducer);
Run Code Online (Sandbox Code Playgroud)
有谁知道这是否可以在本机代码中完成,如果可以,如何实现?
谢谢
我最近对 android 开发产生了兴趣,但是对我来说最大的障碍是仅仅想到使用 java 来开发手机。我对 Java 能够以一致的帧速率制作高性能游戏的能力没有信心,我不希望我的程序在垃圾收集期间停顿。我主要是一名 C/C++ 程序员(如果需要,我也使用汇编),他以前用 java 编程,并且从过去的经验中发现,由于我对内存分配等各个方面有更多的控制,我可以优化我的程序此外,我一般更喜欢低级编程。
我已经在这里阅读了问题和答案,他们建议使用 NDK,现在我查看了 NDK,它仍然引入了 java 的膨胀。基本上,如果我理解正确的话,我要做的就是编写一些简短的 Java 代码来调用我的本机代码。这个java的问题仍然在后台运行,因此消耗了手机缺少的宝贵内存,java仍然需要启动,甚至在我的电脑上java也需要一点时间来启动,并且考虑到我正在编程的事实一部手机,我确信它的 CPU 速度要慢得多,它需要更长的时间。我发现 java 和低内存占用是矛盾的,不希望 java 在后台使用 ram 空转运行。我希望这个程序被官方应用商店接受,我相信它被称为“
我正在 C++ 中创建两个数组,它们将在 java 端读取:
env->NewDirectByteBuffer
env->NewByteArray
Run Code Online (Sandbox Code Playgroud)
这些函数会复制我发送的缓冲区吗?我需要在 C++ 端的堆上创建缓冲区还是可以在堆栈上创建它因为 jvm 会复制它?
例如,此代码是否可以正常运行:
std::string stam = "12345";
const char *buff = stam.c_str();
jobject directBuff = env->NewDirectByteBuffer((void*)buff, (jlong) stam.length() );
Run Code Online (Sandbox Code Playgroud)
另一个例子:
std::string md5 "12345";
jbyteArray md5ByteArray = env->NewByteArray((jsize) (md5.length()));
env->SetByteArrayRegion(md5ByteArray, 0, (jsize) (md5.length()), (jbyte*)
md5.c_str());
Run Code Online (Sandbox Code Playgroud)
字符串在堆栈上创建。这段代码会一直工作还是我需要在堆上创建这些字符串并负责在 java 使用完后删除它
我有一个 Java 项目,其中使用了本机库 (dll),其代码是用 CPP 编写的。我想调试 java 应用程序,一旦到达在 dll 中编译的本机方法的某个点,我想进入 CPP 代码。我该怎么做?是否有任何可用的 IDE 可以在 java 和 cpp 代码之间切换调试?
我有一个当前在 Visual Studio 中设置的 C++ 代码库(在 Windows 上运行),其中包含多个相互依赖的项目。我试图把它带到 Android Studio,让它在 Android 上运行。我熟悉 Visual Studio 和 C++,但对 Android Studio 的 Gradle 和 CMake 很陌生。
我(可能是错误的)期望是尝试处理像 Visual Studio 解决方案这样的 Android Studio 项目和像 Visual Studio 项目这样的 Android Studio 模块。鉴于我的代码库在 Visual Studio 中使用多个项目,我试图在 Android Studio 中创建多个模块——每个模块都有自己的build.gradle和CMakeLists.txt文件。
问题是我无法让一段代码(AS 模块)与另一段链接。我正在编译这些不同的部分作为STATIC使用add_library()(我计划有一个模块来创建一个SHARED库,加载到Java)。
我可以轻松地通过include_directories("../OtherModule/src/"). 但是,我无法将其链接。我找不到要链接到的 .so(或类似)文件(通过target_link_libraries()或等效)。当我从给定的模块中提取 .arr 文件时,我看不到任何 .so 或任何内容。
我意识到我可以简单地将整个代码库放在一个模块下(使用一个build.gradle和一个CMakeLists.txt-- 或者CMakeLists.txt使用 's 的网络add_subdirectory())。我不知道这是否可以,或者是否需要更多/更少的时间来构建。
我确信可以有多种方法来设置它,这可能只是一个偏好问题。到目前为止,我所做的所有研究都只发现将本机代码严格添加到带有 Java 代码的同一模块中——做基本的 …
我设法在我的应用程序中添加了 facebook 登录和 google 登录,但我想我可能做错了什么。在我开始添加登录之前,我之前做了一个用户意图的启动活动,因为我是一个新手,所以我在某个地方搞砸了,并且已经挣扎了 2 天知道。每当我尝试执行 react-native run-android 时,项目都会成功构建,但模拟器不会自动打开应用程序,因为我收到“正在启动:
Intent { cmp=com.happyo/.MainActivity }
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.happyo/.MainActivity } from null (pid=4430, uid=2000) not exported from uid 10085".
Run Code Online (Sandbox Code Playgroud)
请我绝望我不知道如何解决它,在此先感谢!
这是我的 AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.happyo"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="22" />
<application
android:name=".MainApplication"
android:allowBackup="true"
android:label="@string/app_name"
android:exported="true"
android:icon="@mipmap/ic_launcher"
android:theme="@style/AppTheme">
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="{myappkey}"/>
<activity
android:name=".SplashActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用 JWT 令牌对请求进行身份验证的 React Native 应用程序。为此,我创建了 axios 请求和响应拦截器,以将令牌添加到每个请求(请求拦截器),并在响应具有 401 HTTP 状态(响应拦截器)时将用户重定向到登录屏幕。
问题是我还没有找到在组件外部进行重定向的方法。下面的代码位于 API 服务中,每当我想要进行 API 调用时都会导入该服务。
我需要做什么才能重定向到我的登录屏幕,因为该服务是无状态的并且不关心它是从哪个组件调用的?
// Response interceptor
axiosInstance.interceptors.response.use(
response => {
// Do something with response data
if (response.status === 401) {
deviceStorage.removeData('token');
// TODO:
// Redirect to login page
}
return response;
},
error => {
// Do something with response error
return Promise.reject(error);
}
);
Run Code Online (Sandbox Code Playgroud) 我正在使用 React Native(版本 0.59.10)构建一个项目。每当我运行测试(使用 Jest)时,我都会收到以下警告:
console.warn node_modules/react-native/Libraries/Animated/src/NativeAnimatedHelper.js:248
Animated: `useNativeDriver` is not supported because the native animated module is missing. Falling back to JS-based animation. To resolve this, add `RCTAnimation` module to this app, or remove `useNativeDriver`. More info: https://github.com/facebook/react-native/issues/11094#issuecomment-263240420
Run Code Online (Sandbox Code Playgroud)
这似乎是由于使用了Animatedin TouchableOpacitywhich 又被Buttonfrom 'react-native-elements' 使用。
使用 Xcode 查看我的项目,我可以看到该RCNativeAnimation项目在那里:
我检查了引用的链接:https : //github.com/facebook/react-native/issues/11094#issuecomment-263240420但这已经很老了,指的是 React Native 和 Xcode 的非常旧版本。
我猜这个警告只是与RCNativeAnimation无法从测试中访问的本机模块有关,但我不知道如何useNativeDriver在测试上下文中“删除”。显然,在真实的应用程序中,我想确保我使用的是原生动画库,但在单元测试中我不在乎。
消除此警告的推荐方法是什么?
当我编写此代码时显示错误,请告诉我,我在哪里?
import React, { Component } from 'react'; import { StyleSheet, Text, View, TouchableOpacity, FlatList, Modal, } from 'react-native';
import FastImage from 'react-native-fast-image'
const Imagegallery = () => (
<FastImage
style={{ width: 200, height: 200 }}
source={{
uri: 'https://unsplash.it/400/400?image=1',
priority: FastImage.priority.normal,
}}
resizeMode={FastImage.resizeMode.contain}
/>
)
export default Imagegallery
Run Code Online (Sandbox Code Playgroud) native photo-gallery reactjs react-native react-native-android