小编goe*_*goe的帖子

如何在Android Studio和NDK上使用额外的*.so库

我正在尝试生成一个Android应用程序来使用一些额外的*.so库(特别是'libinterface.so').这些库是在外部生成的,并作为依赖包含在从Java端调用的包装类中.该库存储在'src/main/jniLibs/armeabi-v7a'中.系统将所有.so文件包含到生成的应用程序中.

以前,我使用Eclipse就是为了这个目的而且我能够使用这个库,但是我在使用Android Studio时遇到了问题.

生成的错误是:

/home/******/Libraries/android-sdk-linux/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/aarch64-linux-android/4.9/../../../../aarch64-linux-android/bin/ld: cannot find -linterface
Run Code Online (Sandbox Code Playgroud)

由于链接器抛出错误,它看起来与库包含步骤有关.在Eclipse上,我使用'Android.mk'文件来包含新库,但我找不到使用Gradle执行此操作的方法.

#Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libinterface-prebuilt
LOCAL_SRC_FILES := prebuilt/libinterface.so
include $(PREBUILT_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

我试图用这个gradle定义包含库(注意:我已经包含了最后一个JNI支持和使用本教程的 gradle实验):

...
android.buildTypes {
    release {
        minifyEnabled = false
        proguardFiles.add(file('proguard-android.txt'))
    }
}

android.ndk {
    moduleName = "custom_wrapper_jni"
    cppFlags.add("-I" + file("src/main/jni").absolutePath)
    cppFlags.add("-I" + file("../Integration/include").absolutePath)  // <- New library header include path 
    cppFlags.add("-L" + file("src/main/jniLibs/armeabi-v7a").absolutePath)  // <- Path where the library is stored
    cppFlags.add("-std=c++11")
    stl = "stlport_static" // Which STL library to use: gnustl or stlport …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android shared-libraries android-studio gradle-experimental

8
推荐指数
1
解决办法
2574
查看次数

const char*用C++加倍翻译问题

我有两个使用相同库的示例应用程序,它们之间的主要区别在于一个使用qt而另一个应用程序是控制台应用程序.

在公共库中,我有这个测试代码:

double test = 0.1;
double test2 = atof("2.13134");
double test3 = atof("1,12345");
Run Code Online (Sandbox Code Playgroud)

如果我使用非qt应用程序的值是:

test = 0.10000000000001
test2 = 2.1323399999999999998
test3 = 1   // This is the expected result using a ',' as delimitation character
Run Code Online (Sandbox Code Playgroud)

但是使用qt应用程序:

test = 0.10000000000001
test2 = 2     // This is not expected!!!
test3 = 1.1234500000000000001
Run Code Online (Sandbox Code Playgroud)

有没有'atof'的行为因qt而改变的情况?

c++ qt atof

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

如何避免图像重定位使用带有HTML内容的NSSharingService发送电子邮件

我正在尝试使用Mac应用程序中的NSSharingService发送电子邮件.我将HTML代码包含为电子邮件正文.出现"邮件"窗口时,将对内容进行格式化,但HTML结构中的图像将移至底部电子邮件中.此外,即使我将此图像定义为链接,也不会在电子邮件正文中执行链接.

这是我正在使用的代码:

NSString* htmlText = @"<html><body><p>Message body</p><br/><a href='http://www.google.com'><img border='0' src=http://blog.jimdo.com/wp-content/uploads/2014/01/tree-247122.jpg label='Video' width='512' height='512'></img></a><br/><p>Video: <a href='http://blog.jimdo.com/wp-content/uploads/2014/01/tree-247122.jpg'>http://blog.jimdo.com/wp-content/uploads/2014/01/tree-247122.jpg</a></p><br/><p>Another link to <a href='http://www.google.com' target='_blank'>google</a></p></body></html>";

NSData* textData = [NSData dataWithBytes:[htmlText UTF8String] length:[htmlText lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];
NSAttributedString* textAttributedString = [[NSAttributedString alloc] initWithHTML:textData options:nil documentAttributes:nil];


NSSharingService *emailSharingService = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeEmail];
[emailSharingService setSubject:@"Subject"];

emailSharingService.delegate = self;

NSArray* shareItems = [NSArray arrayWithObjects: textAttributedString, nil];

[emailSharingService performWithItems:shareItems];
Run Code Online (Sandbox Code Playgroud)

图像应出现在"消息体"文本行之后和"视频:..."之前,但在我的情况下它出现在底部.

HTML代码在Firefox和Safari上进行测试.此外,我可以使用Safari打开HTML文本,然后选择"文件 - >共享 - >通过电子邮件发送此页面"它正是我正在尝试做的事情(但使用Safari,而不是我的应用程序).

任何想法都很好.提前致谢.

macos objective-c html-email

6
推荐指数
1
解决办法
606
查看次数

Android NDK分析工具

试图在Android上分析我的本机库,我担心这个平台缺乏免费的分析工具(特别是对本地库进行分析).

至于说这里这里有两种可选方案:

  1. android-ndk-profiler:侵入性分析.
  2. fplutil:非侵入性分析.

第一个选项会在分析器处于活动状态时干扰执行,并且作为android-ndk-profiler自述文件:" 作为替代方案,请尝试使用Google自己的FPL实用程序 - NDK perf,它提供了一种非侵入性方式使用Linux perf " 分析您的应用程序.

但是,这个新工具看起来只适用于两个特定的设备:

## Set of tested devices that are known to support perf.
SUPPORTED_DEVICES = set([
    'mantaray',  # Nexus 10
    'nakasi',  # Nexus 7 (2012)
])
Run Code Online (Sandbox Code Playgroud)

看起来该设备应该具有"Linux Perf"支持才能使用fplutis profiler.

除了Nexus 10和Nexus 7(2012)之外还有其他任何设备可以使用这种分析工具吗?

有没有办法在其他设备上激活这种"Linux Perf"支持?(例如改变rom)

还有其他(更新)的选择吗?

谢谢.

注意:像这样这样的其他一些答案建议使用Valgrid,但我认为它是一个旧的替代品,现在它已被弃用.

android profiling android-ndk

6
推荐指数
0
解决办法
1217
查看次数

如何使用 CMake 在“其他链接器标志”中设置库?

我正在尝试使用 cmake 生成一个 Xcode 项目,但我无法在项目设置中定义“其他链接器标志”。我使用了“target_link_libraries”,但它不起作用。有什么线索吗?我想要做的是定义链接时必须包含哪些库。如果我手动执行,例如我输入“-lopencv_core”。

xcode cmake

5
推荐指数
1
解决办法
2191
查看次数