几个星期前,我发布了一个问题如何根据buildType覆盖资源.就在昨天,有一个用于android的gradle插件版本.根据这篇关于G +的帖子,我决定写下这个问题.
我详细描述的问题:
我想根据它创建一些资源值buildType,但这不能正常工作:只有在命令行上完成构建时才会创建文件"generated.xml":
gradlew build
Run Code Online (Sandbox Code Playgroud)
但是我通过在comannd线上构建完整的项目也会出错:
* What went wrong: Execution failed for task ':app:merge<buildVariant>Resources'.
Unsupported type 'String' in file C:\Users\...\build\res\generated\release\values\generated.xml
Run Code Online (Sandbox Code Playgroud)
每个其他构建试用版都不会创建此文件.我试过以下:
奇怪的gradle控制台输出:
:app:generateBuildVariantResValues UP-TO-DATE
Run Code Online (Sandbox Code Playgroud)
我的build.gradle:
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "String", "RES FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "String", "RES FOO", "RES FOO RELEASE"
}
}
Run Code Online (Sandbox Code Playgroud)
我的"generated.xml":
<!-- Automatically generated file. …Run Code Online (Sandbox Code Playgroud) 这应该是一个非常简单的问题:)
我有一个工作正常的项目.现在我想重命名它并更改项目文件夹的路径.首先看起来很简单:右击 - >"移动"和"重构/重命名".
移动并重命名我的项目文件夹和我的apk模块后,没有像以前那样的项目结构.我的项目库已被包含两次.我查看了'.iml'文件,发现前面的路径已经包含了 - 所以我改变了这个.在此之后,我可以通过命令行编译我的项目,但不能使用IDE.我有这个错误:
NullPointerException: no project directory specified
Run Code Online (Sandbox Code Playgroud)
什么是移动和重命名项目的默认方式?我通过制作一个新项目并复制所有文件解决了我的问题,但知道这个"问题"的解决方案会很酷.
编辑:
原产地项目结构:
MyProject
--- libraries
--- MyApp
Run Code Online (Sandbox Code Playgroud)
搬家后:
MyProject
--- MyProject (new path)
--- MyProject (old path)
Run Code Online (Sandbox Code Playgroud)
我想我必须做的不仅仅是复制项目.不知怎的,我必须指定"新"项目,不是吗?
我的项目有两种:
flavor1 -> packagename: com.example.flavor1
flavor2 -> packagename: com.example.flavor2
Run Code Online (Sandbox Code Playgroud)
现在我想构建一个flavor1和flavor2的构造变量.buildvariant的唯一区别是另一个packagename.
我的项目使用MapFragments并且只有一个Manifest - 所以我将MAPS_RECEIVE的权限名称放在我各自风格的字符串资源文件中.
问题是:如何替换buildvariant的字符串资源?
我尝试了以下方法(在这篇文章中描述):
buildTypes{
flavor1Rev{
packageName 'com.example.rev.flavor1'
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: ['package_permission' : 'com.example.rev.flavor1.permission.MAPS_RECEIVE'])
}
}
Run Code Online (Sandbox Code Playgroud)
但是使用这个我得到了这个错误:
找不到参数[{tokens = {package_permission = com.example.rev.flavor1.permission.MAPS_RECEIVE}}的方法filter(),BuildTypeDsl_D ecorated {name = ReplaceTokens,debuggable = false,jniDebugBuild = false,renderscript DebugBuild = false, BuildTypeD上的renderscriptOptimLevel = 3,packageNameSuffix = null,versionNameS uffix = null,runProguard = false,zipAlign = true,signingConfig = null}] sl_Decorated {name = buderusFinal,debuggable = false,jniDebugBuild = false,renderscr iptDebugBuild = false,renderscriptOptimLevel = 3 ,packageNameSuffix = null,versionNa meSuffix = null,runProguard = false,zipAlign …
在我的build.gradle文件中,我设置了以下依赖项:
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
Run Code Online (Sandbox Code Playgroud)
这将自动适应最新发布的版本(像它的描述在这里).
如何查看我的项目中使用的当前版本?
编辑2013-08-08:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
Run Code Online (Sandbox Code Playgroud) 我想用gradle覆盖res/strings.xml中的一些字符串.
我知道,因为Android Gradle Plugin 0.7.+ theres可能有一个变种特定的源文件夹.但我的应用程序有很多口味,我不想添加额外的变体特定文件夹.
更新2014-01-17
我想要的详细信息:
我的资源中有一些变量只依赖于buildType(例如"release").首先,我认为我的SOLUTION_1(在资源合并后覆盖数据)很好,因为如果我必须更改这些变量,我只需要在build.config(只有一个地方)中更改它们.但正如Scott Barta在下面的评论中所写的那样,为什么这个解决方案不是一个好主意有一些很好的理由.
所以我尝试了另一个解决方案SOLUTION_2(只是合并正确的资源)基于shakalaca的这个GitHub项目.我认为这种方式更优雅,我仍然有一个优势就是在一个地方改变变量!
SOLUTION_1(在资源合并后覆盖数据):
我在AS 0.4.2中做了什么:
在build.gradle我尝试将字符串"Hello World"覆盖为"OVERRIDE"(根据我在这篇文章中的回答):
android.applicationVariants.all{ variant ->
// override data in resource after merge task
variant.processResources.doLast {
overrideDataInResources(variant)
}
}
def overrideDataInResources(buildVariant){
copy {
// *** SET COPY PATHS ***
try {
from("${buildDir}/res/all/${buildVariant.dirName}") {
// println "... FROM: ${buildDir}/res/all/${buildVariant.dirName}"
include "values/values.xml"
}
} catch (e) {
println "... EXCEPTION: " + e
}
into("${buildDir}/res/all/${buildVariant.dirName}/values")
// …Run Code Online (Sandbox Code Playgroud)android gradle android-studio build.gradle android-gradle-plugin
我在android studio中有一个使用项目库的项目.我的问题是gradle文件的配置.
我真的尝试了很多在这里发布的解决方案(在模块中定义modul作为modul,sherlock示例,设置正确的源集 ......)但是我总是得到相同的错误(只要我添加lib debendency就可以了我的应用build.gradle文件):
A problem occurred configuring project ':MyApp'.
> Failed to notify project evaluation listener.
> Configuration with name 'default' not found.
Run Code Online (Sandbox Code Playgroud)
我已经从命令行进行了清理和构建,但这没有任何效果.是否有可能这只是Android Studio早期版本中的一个错误(如本文中的评论)?或者我会错过什么?
我目前的Android Studio版本:0.1.6和我的操作系统:Windows 7,64位
请帮助我,我是新手,我以前从未使用过maven或ant.
编辑1:
gardelw compileDebug --stacktrace
* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring pro
ject ':MyApp'.
at org.gradle.configuration.LifecycleProjectEvaluator.addConfigurationFa
ilure(LifecycleProjectEvaluator.java:79)
at org.gradle.configuration.LifecycleProjectEvaluator.notifyAfterEvaluat
e(LifecycleProjectEvaluator.java:74)
at org.gradle.configuration.LifecycleProjectEvaluator.evaluate(Lifecycle
ProjectEvaluator.java:61)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProj
ect.java:465)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProj
ect.java:76)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuil
dConfigurer.java:31)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(Default
GradleLauncher.java:142)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradle
Launcher.java:113)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLaun
cher.java:81) …Run Code Online (Sandbox Code Playgroud) 我对一个奇怪的问题感到困惑.基本上情况是这样的.我在我的类中实现了runnable,我在一个新线程中传递了类,我run()在实现runnable的类中覆盖了我的方法然后我启动了线程.但是,我的start()方法从不调用我的run()方法.我搜索论坛但我似乎无法找到另一个类似的问题.
以下是我的示例代码:
public class EmailManager implements Runnable {
PortalManagementSBLocal pmbr= this.lookupPortalManagementSB();
Thread runner;
String emailServerName = "";
String smtpPort = "";
String emailTo = "";
String emailFrom = "";
String mailer = "JavaMailer";
String subject = "";
String message = "";
public EmailManager() {
}//default constructor
public EmailManager(String emailTo, String subject, String message){
this.emailTo=emailTo;
this.subject = subject;
this.message = message;
//need to make this dynamic
this.emailFrom = pmbr.getEmailFrom();
this.emailServerName = pmbr.getEmailServerName();
this.smtpPort = pmbr.getEmailSMTPPort(); …Run Code Online (Sandbox Code Playgroud) 就在几周前,我遇到了以下问题:如何用gradle替换构造变量的字符串?
我也自己回答了这个问题.
到目前为止一切正常:我刚刚意识到我的复制任务不再起作用了.我花了几个小时来解决这个问题,直到我意识到这取决于Gradle Android插件版本:直到0.5.4的一切正常.对于较高版本,我不会进入我的复制任务.
这是控制台输出:
// gradle android plugin version: 0.5.6 and 0.5.5 --> copy tas doesn't work
:etscanner:prepareFlavor1Flavor1ReviewDependencies
:etscanner:compileFlavor1Flavor1ReviewAidl
:etscanner:generateFlavor1Flavor1ReviewBuildConfig
:etscanner:mergeFlavor1Flavor1ReviewAssets
:etscanner:compileFlavor1Flavor1ReviewRenderscript
:etscanner:mergeFlavor1Flavor1ReviewResources
:etscanner:processFlavor1Flavor1ReviewManifest
:etscanner:processFlavor1Flavor1ReviewResources
:etscanner:compileFlavor1Flavor1ReviewNote: Some input files use or override a d
eprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: <path>.DetailAdapter
.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:etscanner:dexFlavor1Flavor1Review
:etscanner:processFlavor1Flavor1ReviewJavaRes UP-TO-DATE
:etscanner:validateFlavor1Flavor1Signing
:etscanner:packageFlavor1Flavor1Review
:etscanner:zipalignFlavor1Flavor1Review
// gradle android plugin version: 0.5.4 --> copy task work
:etscanner:prepareFlavor1Flavor1ReviewDependencies
:etscanner:compileFlavor1Flavor1ReviewAidl
:etscanner:generateFlavor1Flavor1ReviewBuildConfig
:etscanner:mergeFlavor1Flavor1ReviewAssets
:etscanner:compileFlavor1Flavor1ReviewRenderscript
:etscanner:mergeFlavor1Flavor1ReviewResources …Run Code Online (Sandbox Code Playgroud) 我想从我的应用程序发送一封html邮件.我知道并非所有邮件客户端都允许使用html标签.但我在API中找到了常量的Intent.EXTRA_HTML_TEXT(http://developer.android.com/reference/android/content/Intent.html#EXTRA_HTML_TEXT).
我的代码看起来像这样,但它始终只显示文本而不是html格式的文本,无论我使用的邮件客户端是什么:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, "Hello World");
intent.putExtra(Intent.EXTRA_HTML_TEXT, "<html><body><h1>Hello World</h1></body><html>");
intent.setType("text/html"); // intent.setType("plain/text");
startActivity(Intent.createChooser(intent, "Choose Email Client:"));
Run Code Online (Sandbox Code Playgroud)
那错误在哪里?
我有一个相对简单的应用程序,已经在谷歌的Play商店.
现在我已经更新了这个应用程序.此更新的一点是我包含了ZBar-Scanner.其余的变化很小,不应该对我的问题产生任何影响.
我只是将我应用程序的最新版本放在Play-Store中,然后收到以下警告:"警告:活动APK支持的设备数量少于以前活动的APK.有些用户不会收到更新."
我从sourceforge.net(http://sourceforge.net/projects/zbar/files/AndroidSDK/)下载了ZBarAndroidSDK-0.2.zip并将其导入我的项目,如README-File中所述.
我在我的HTC Wildfire S( - >版本2.3.5),三星Galaxy 3(GT-I5800 - >版本2.2)和我的Galaxy Nexus( - >版本4.2)上测试了我的本地应用程序.从来没有一个问题.一切正常.我还测试了导出的APK并没有问题.
现在我将此APK添加到Play-Store并更新我的应用程序,我收到测试设备的警告.我的HTC Wildfire和我的三星Galaxy 3都无法更新新版本.
任何人都可以帮我解释一下这个问题是什么?
非常感谢!!!
编辑:
我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.myproject"
android:versionCode="5"
android:versionName="2.0"
android:installLocation="preferExternal"
>
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="11"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<application
android:uiOptions="splitActionBarWhenNarrow"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
>
<!-- enable the search dialog to send searches to SearchableActivity throughout the application -->
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchableActivity" />
<activity
android:label="@string/app_name"
android:name=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.NoBackground">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity …Run Code Online (Sandbox Code Playgroud) android android-manifest android-2.2-froyo android-2.3-gingerbread zbar