我想使用来自另一个 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) 我有一个片段:
class MyFragment : BaseFragment() {
// my StudentsViewModel instance
lateinit var viewModel: StudentsViewModel
override fun onCreateView(...){
...
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProviders.of(this).get(StudentsViewModel::class.java)
updateStudentList()
}
fun updateStudentList() {
// Compiler error on 'this': Use viewLifecycleOwner as the LifecycleOwner
viewModel.students.observe(this, Observer {
//TODO: populate recycler view
})
}
}
Run Code Online (Sandbox Code Playgroud)
在我的片段中,我有一个 StudentsViewModel 的实例,它在onViewCreated(...)
.
在,StudentsViewModel
,students
是一个LiveData
:
class StudentsViewModel : ViewModel() {
val students = liveData(Dispatchers.IO) {
...
} …
Run Code Online (Sandbox Code Playgroud) android android-fragments android-livedata android-viewmodel
我有一个用Objective-C编写的iOS项目.我在项目中创建了一个Swift类,成功生成了用于访问Swift中的objective-c的桥接头文件,并且它工作正常.
我的问题是另一种方式.我想在objective-c代码中导入Swift类.
在xcode,target - > Build Settings - > Swift Compiler部分,我看到Objective-C Generated Interface Header Name
带有值的字段myModule-Swift.h
,但是当我在objective-c类中导入这个头时:
#import "myModule-Swift.h"
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误:
myModule-Swift.h file not found
Run Code Online (Sandbox Code Playgroud)
在项目中,我也找不到这个文件.我怎么解决这个问题?
我的xcode版本是6.4
我有一个枚举类型:
public enum Operation {
PLUS() {
@Override
double apply(double x, double y) {
// ERROR: Cannot make a static reference
// to the non-static method printMe()...
printMe(x);
return x + y;
}
};
private void printMe(double val) {
System.out.println("val = " + val);
}
abstract double apply(double x, double y);
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我定义了一种enum
有价值的类型PLUS
.它包含一个不变的特定体.在它的正文中,我试着打电话 printMe(val);
,但我得到了编译错误:
无法对非静态方法printMe()进行静态引用.
为什么我会收到此错误?我的意思是我在PLUS
体内覆盖了抽象方法.为什么它在static
范围内?如何摆脱它?
我知道添加一个static
关键字来printMe(){...}
解决问题,但我有兴趣知道如果我想保持printMe()
非静态是否还有其他方法?
另一个问题,与上面的问题非常类似,但这次错误消息反过来说,即PLUS(){...}
具有非静态上下文:
public enum Operation {
PLUS() …
Run Code Online (Sandbox Code Playgroud) 我正在docker-compose.yaml
为我的项目编写一个文件。我已经检查了这里的卷文档。
我还了解 docker 中的概念volume
,即我可以安装卷,例如主机上的目录在 -v my-data/:/var/lib/db
哪里,而数据库容器内的路径在哪里。my-data/
/var/lib/db
我的困惑在于我上面放置的链接。那里有以下示例:
version: "3.9"
services:
db:
image: db
volumes:
- data-volume:/var/lib/db
backup:
image: backup-service
volumes:
- data-volume:/var/lib/backup/data
volumes:
data-volume:
Run Code Online (Sandbox Code Playgroud)
我想知道这是否意味着我必须data-volume
在我的主机上创建一个名为的目录?如果我的计算机上有一个带有路径的目录temp/my-data/
,并且我想将该路径挂载到数据库容器, 该怎么办/var/lib/db
?我应该做下面这样的事情吗?
version: "3.9"
services:
db:
image: db
volumes:
- temp/my-data/:/var/lib/db
volumes:
temp/my-data/:
Run Code Online (Sandbox Code Playgroud)
我的主要困惑是volumes:
底部的部分,我不确定卷名是否应该是我的目录的路径,或者应该只是我给出的字面名称,如果是后一种情况,那么给定的名称如何映射temp/my-data/
在我的机器上?该示例并未表明 & 含糊不清,以澄清这一点。
有人可以帮我澄清一下吗?
PS我尝试使用上面的 docker-compose 我猜,最终出现错误:
ERROR: The Compose file './docker-compose.yaml' is invalid because:
volumes value 'temp/my-data/' does not match any of …
Run Code Online (Sandbox Code Playgroud) 我通过以下方式在浏览器中以编程方式打开一个Url:
private final String url = "https://www.google.com";
Uri uri = Uri.parse(url);
Intent intent = new Intent();
intent.setData(uri);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
通常,代码工作正常,它在浏览器中打开Http地址.
但总会有一个系统弹出对话框要求用户选择一个应用程序来完成操作:
用户必须从弹出窗口中选择Chrome,然后打开页面.我不明白为什么谷歌+应用程序是选项之一.
我如何避免应用程序选择的系统对话框?我的意思是如何设置默认浏览器(Chrome)并且我的代码可以在没有此系统对话框的情况下打开网址?
我已经通过安装了 prettier
yarn add prettier
Run Code Online (Sandbox Code Playgroud)
我希望 prettier 仅格式化打字稿代码(我正在开发AWS CDK项目,按照惯例没有src
文件夹,并且到处可能有打字稿文件)。换句话说,我想更漂亮地检查我的项目中具有扩展名的所有文件*.ts
。
我检查了它的配置文档。但没有这样的选项来指定文件扩展名。
那么我怎样才能只对 *ts 文件运行 prettier 呢?有可能吗?如果没有,解决方法是什么?
我已经下载了第三方Android库项目,该项目不包含java类文件,而是包含文件夹下的jar文件libs/
:
libs/
- CustomService.jar
res/
-…
pom.xml
Run Code Online (Sandbox Code Playgroud)
这个库项目可以构建为apklib存档.我构建了它并且我已将此存档安装到我的本地maven存储库中.
然后在我自己的Android项目中,我添加了这个apklib项目的依赖项:
<dependency>
<groupId>com.custom.service</groupId>
<artifactId>custom-service</artifactId>
<type>apklib</type>
<version>1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在我的Java代码中,我使用了CustomService.jar中的类,但是当我maven构建我的项目时,我经常遇到以下错误:
[ERROR] package com.custom.service.user does not exist
[ERROR] location: class com.my.app.MyClass
[ERROR] /Users/Johon/MyApp/src/main/java/com/my/app/MyClass.java:[34,17] cannot find symbol
[ERROR] symbol: variable UserService
Run Code Online (Sandbox Code Playgroud)
上面的错误抱怨它无法UserService
从库apklib存档中找到该类.然后,我通过命令检查了库jar文件的内容:
jar tf CustomService.jar
我看到该类位于库项目的CustomService.jar中
com/custom/service/user/UserService.class
Run Code Online (Sandbox Code Playgroud)
这个类在jar中,为什么我得到错误然后????
我正在SBT
用来构建我的Scala
项目.我的Java
代码也在我的项目中.
当我运行构建时,我不断收到以下错误:
错误:包sun.security.util不存在[error] import sun.security.util.ObjectIdentifier;
我明白我需要声明依赖sun.security.util
,但我不知道我应该依赖什么依赖?
我的build.sbt包含:
libraryDependencies ++= Seq("org.springframework" % "spring-dao" % 2.0.8",)
Run Code Online (Sandbox Code Playgroud)
我的JDK版本是"1.7.0_25".我需要使用这个sun.security.util
包.这个链接表示在JDK中无法保证.如何声明依赖项以使其工作?我的意思是,我应该添加的依赖名称是什么?
我使用的是第三方框架,有一个文件包含以下代码:
struct AdServiceType {
init(_ value: UInt)
var value: UInt
}
var Internal: AdServiceType { get }
var Normal: AdServiceType { get }
var External: AdServiceType { get }
class AdService : NSObject {
var serviceType: AdServiceType
init!()
}
Run Code Online (Sandbox Code Playgroud)
然后,在我自己的项目课中,我有
var aService : AdService?
//aService is initialised
//COMPILER ERROR: Binary operator ’==’ cannot be applied to two AdServiceType operands
if aService!.serviceType == Normal {
//DO SOMETHING
}
Run Code Online (Sandbox Code Playgroud)
当我检查是否serviceType
是时,我得到了上面提到的编译器错误Normal
.为什么?如何摆脱它?