我们提到android.intent.action.MAIN并android.intent.category.LAUNCHER作为启动器活动的Intent过滤器Manifest.xml.什么是imp.这两个?它们的功能是什么?
您好我正在编写一个应用程序,即手机重启时,该服务将自动启动而不是单击该应用程序.
这是我的代码
BootCompleteReceiver.java
package com.example.newbootservice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, MsgPushService.class);
context.startService(service);
}
}
Run Code Online (Sandbox Code Playgroud)
MsgPushService.java
package com.example.newbootservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class MsgPushService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
return Service.START_STICKY;
}
@Override
public void onDestroy() { …Run Code Online (Sandbox Code Playgroud) 我写了一些代码,利用开源库来完成一些繁重的工作.这项工作是在linux中完成的,使用单元测试和cmake来帮助将其移植到Windows.需要在两个平台上运行它.
我喜欢Linux,我喜欢cmake,我喜欢自动生成可视化工作室文件.就像现在一样,在Windows上,一切都将编译,它将链接,它将生成测试可执行文件.
然而,为了达到这一点,我不得不与Windows斗争几天,学习所有关于清单文件和可再发行组件包.
据我所知:
在VS 2005中,微软创建了Side By Side dlls.这样做的动机是,之前,多个应用程序将安装相同dll的不同版本,导致先前安装和正在运行的应用程序崩溃(即"Dll Hell").并排dll修复此问题,因为现在每个可执行文件/ dll附加一个"清单文件",指定应执行哪个版本.
这一切都很好.应用程序不应再神秘崩溃.然而...
微软似乎每次发布Visual Studio都会发布一套新的系统dll.另外,正如我之前提到的,我是一名试图链接到第三方库的开发人员.通常,这些东西作为"预编译的dll"分发.现在,当使用一个版本的可视工作室编译的预编译dll链接到使用另一个版本的可视工作室的应用程序时会发生什么?
根据我在互联网上看到的内容,发生了不好的事情.幸运的是,我从来没有这么做 - 在运行可执行文件时我一直遇到"MSVCR80.dll not found"问题,因此我开始涉足整个清单问题.
我终于得出结论,使这个工作的唯一方法(除了静态链接一切)是所有第三方库必须使用相同版本的Visual Studios编译 - 即不使用预编译的dll - 下载源,构建一个新的DLL并使用它.
这实际上是真的吗?我错过了什么?
此外,如果情况确实如此,那么我不禁会认为微软出于各种原因故意这样做.
它不仅会破坏所有预编译的二进制文件,使得使用预编译的二进制文件变得不必要,如果您碰巧为使用第三方专有库的软件公司工作,那么每当他们升级到最新版本的可视化工作室时 - 您的公司必须现在做同样的事情或代码将不再运行.
顺便一下,linux如何避免这种情况?虽然我说我喜欢在它上面进行开发并且我理解链接的机制,但是我没有维护任何应用程序足够长的时间来遇到这种低级别的共享库版本问题.
最后,总结一下:是否可以将预编译的二进制文件与这个新的清单方案一起使用?如果是的话,我的错误是什么?如果不是,那么微软是否真的认为这会让应用程序开发变得更容易?
更新 - 一个更简洁的问题:Linux如何避免使用Manifest文件?
我正在开发的应用程序有许多活动组织成七个java包.最初我在java包中为每组活动编写了所有编码和内容,作为不同的项目.
现在我想把所有的包放在一个项目中.当我向src文件夹添加一个新包时,我的所有R.id.*值都会出错("R无法解析").
我的直觉告诉我,我必须在项目清单中加入一些花哨的东西,但我找不到任何在线资源告诉我如何.
这个:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.androidbuch.rechner"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7"></uses-sdk>
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:theme="@android:style/Theme.Light">
<activity android:name=".FormularActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
是我AndroidManifest.xml和第8和第11行我得到错误:
找不到与给定名称匹配的资源(在"label"处,其值为"@ string/app_name")
找不到与给定名称匹配的资源(在"label"处,其值为"@ string/app_name")
这真的很奇怪,我没有将值文件夹移动到任何地方.
我正在使用Java Maven程序而且我不知道要输入什么<mainClass>.我已经根据众多 stackoverflow问题尝试了各种各样的东西,但他们没有解决错误.
每次说:
Maven Error: Could not find or load main class ...
Run Code Online (Sandbox Code Playgroud)
我在里面写了这个pom.xml(减去???)
<build>
...
<plugins>
...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass> ??? </mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
Run Code Online (Sandbox Code Playgroud)
我该如何解决这些错误?
如何将程序集清单添加到.NET可执行文件中?
程序集清单是一个XML文件,它添加到具有资源类型RT_MANIFEST(24)的.NET可移植可执行程序(PE )中.
程序集清单用于声明有关可执行文件的许多内容,例如:
如果我想禁用DPI扩展,因为我是一个优秀的开发人员:
<!-- We are high-dpi aware on Windows Vista -->
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
Run Code Online (Sandbox Code Playgroud)我可以声明我是在Windows 7上设计和测试的,我应该继续依赖Windows 7中的任何错误
<!-- We were designed and tested on Windows 7 -->
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
Run Code Online (Sandbox Code Playgroud)我可以声明我是一个优秀的开发人员,不需要文件和注册表虚拟化
<!-- Disable file and registry virtualization -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
Run Code Online (Sandbox Code Playgroud)我可以声明我依赖于Microsoft Common Controls库的特定版本6 :
<!-- Dependency on …Run Code Online (Sandbox Code Playgroud)根据Microsoft的说法,您必须在ClickOnce应用程序上签名.但在我看来,当我在没有签名的情况下发布它时(通过关闭"签署ClickOnce清单"选项)它可以正常工作.
我真的不在乎并保持默认值(我认为我使用的是测试证书),直到我更换计算机并开始收到一条消息,告诉我"应用程序使用与服务器上现有应用程序不同的密钥进行签名" ,这似乎会导致我的用户停止自动更新.显然,VS使用我的计算机名称来创建密钥.
那么,我应该停止签署我的ClickOnce清单以防止出现这种错误,或者唱出它有什么好处.此外,这些证书是否会在安装应用程序以显示我的公司名称时导致"发布者:未知发布者"消息,或者我是否需要购买两种不同类型的证书?
我正在使用 HTML 样板文件,我看到一个名为site.webmanifest. 网上查了资料,不明白怎么用。
是网页开发中的必填文件吗?何时以及为何使用它?我怎么知道什么时候需要使用它?
我是Android开发的新手,我想知道如果你在API级别大于minSdkVersion的XML标签上使用属性会发生什么.
例如:
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="20" />
Run Code Online (Sandbox Code Playgroud)
然后用这个:
<activity android:logo="@drawable/iconwhatever"></activity>
Run Code Online (Sandbox Code Playgroud)
"android:logo"属性来自API级别11.
在Android Studio中,它会出现以下错误,但我想知道如果不考虑会发生什么:
Attribute "logo" is only used in API level 11 and higher. (Current min is 9)
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将不胜感激.