在Android项目之间共享代码和资源的标准建议是使用库.就个人而言,如果(a)共享代码发生了很大变化,或者(b)您的计算机速度不够快,我发现这种方法效果不佳.
我也不想进入部署多个APK,这在使用依赖项目(即Java Build Path,Projects选项卡)时似乎是必要的.
另一方面,使用Eclipse链接源功能共享源代码文件夹效果很好(Java Build Path,Source选项卡,Link Source按钮),但是对于这两个问题:
1)我不能使用相同的技术来共享资源.我可以创建资源父文件夹的链接,但事情变得很糟糕,共享资源不会被编译(我正在使用ADT 21).
2)因此,我决定将共享资源复制到每个项目中,但这不起作用.共享代码无法导入其资源的副本,因为它不知道使用它的项目的包名称.我一直在使用的解决方案是动态访问资源,但随着资源数量的增加,这变得很麻烦.
所以,我需要(1)或(2)的解决方案,否则我将不得不回到图书馆项目.(或许我还有其他选择没有想过?)
我想从命令行构建一个Android项目,并希望将该android.library=true标志添加到project.properties.我也想用androidsdk中的命令来做,而不是手动将它添加到文件中,因为文件名和属性名可能会改变.
该命令android update lib-project -p PATH不再添加此标志.
该命令android create lib-project ...会"添加"此标志,但会覆盖某些文件,如字符串资源
所以我的问题是:使用该android工具可以创建一个将此android.library标志设置为true的project.properties,并且不会做更多的事情吗?
有什么区别android update project和android update lib-project旁边我不能在lib-project中使用一些标志?
我有一个库,在maven中心有一些小部件.当我将该库作为依赖项(从maven中心)添加到使用gradle的项目时,我得到:
java.lang.NoClassDefFoundError: com.my.pacakge.R$styleable
Run Code Online (Sandbox Code Playgroud)
如果我手动下载.aar并将其包含在项目中,一切正常.我尝试使用Android Studio的代码完成来查看是否R包含了库.当我使用maven依赖时,键入不com.my.pacakge.R返回任何结果,但是当我使用本地.aar时,它返回R库的库.
这是库代码:
// widget constructor
public ForegroundImageView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundImageView);
Drawable foreground = a.getDrawable(R.styleable.ForegroundImageView_android_foreground);
if (foreground != null) {
setForeground(foreground);
}
a.recycle();
}
// attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ForegroundImageView">
<attr name="android:foreground"/>
</declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud) 我有两种产品口味和三种构建类型.
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
qa {
applicationIdSuffix ".qa"
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
productFlavors {
old {
applicationId "com.companyname.old"
buildConfigField "String", "contentProvider", '"com.companyname.android.mobile.contentprovider"'
resValue "string", "content_provider_authority", '"com.companyname.android.mobile.contentprovider"'
}
new {
applicationId "com.companyname.new"
buildConfigField "String", "contentProvider", '"' + applicationId + '.contentprovider"'
resValue "string", "content_provider_authority", '"' + applicationId + '.contentprovider"'
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以根据产品风格改变content_provider_authority的resValue,但是对于变体?我希望所有产品版本的构建都使用应用程序ID +".contentprovider"但是对于我们的产品风味旧,如果调试或发布如上所示使用硬编码字符串,但增强它以便为qa构建使用不同的硬编码字符串类型.
android gradle android-build android-studio android-productflavors
几个星期前我安装了Android Studio,我能够创建新的项目,他们建立得很好,我让他们运行.当我创建一个新项目时,gradle不会构建,因为我得到了6个这样的错误:
错误:169.254/16 |*.169.254/16.将忽略这些主机的代理设置.
这就是它所说的.我尝试在线查找信息,甚至在这里,但我发现此错误没有任何用处.有人提到它与他们的DNS设置有关,但没有关于如何修复它.我仍然可以运行和构建我的旧项目.我不能建立任何新的.
我非常感谢这方面的帮助,因为我无法继续推进我的项目.谢谢
与此主题上的许多其他帖子相反,我想从使用Gradle的Android版本中排除本机库.
libfoo.so驻留在默认目录中的库项目中thelib/src/main/jniLibs.在我的主项目的build.gradle中,我尝试按如下方式排除文件:
sourceSets {
all{
jniLibs {
exclude '**/libfoo.so'
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,文件仍在最终的APK中.我已经尝试了不同的路径规范,但它们都不起作用.
这甚至可能,还是有解决方法?
我正在尝试将NDK集成到我的项目中.我正在使用Gradle包装器2.9和类路径:gradle-experimental:0.6.0-alpha3.
项目级别:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.6.0-alpha6'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
应用级别gradle:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "com.ms.knowursensor.android"
minSdkVersion.apiLevel = 11
targetSdkVersion.apiLevel = 23
}
}
compileOptions.with {
sourceCompatibility=JavaVersion.VERSION_1_7
targetCompatibility=JavaVersion.VERSION_1_7
}
android.ndk {
moduleName = "sensorgraph"
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file('proguard-rules.txt')
}
} …Run Code Online (Sandbox Code Playgroud) 这个问题继续我的另一个问题,我想进一步改进.
我能够sourceSets使用以下代码对flavor(具有通用配置)进行分组:
(从上面链接问题的天才那里得到它)
import com.android.build.gradle.api.AndroidSourceSet
android {
sourceSets {
[flavor2, flavor4].each { AndroidSourceSet ss ->
ss.assets.srcDirs = ['repo-assets/flavor2']
ss.res.srcDirs = ['repo-res/flavor2']
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想知道列表[flavor2, flavor4]是否可以从以下任何一个中提取:
除了风味名称,我打算将以下内容存储在外部源(上面的一个)中:
productFlavors)PORPOSE: 我想写一个通用的代码片段来迭代并动态创建productFlavors和sourceSets.我已经推广sourceSets到几乎90%,一个块现在足以满足各种口味.
它现在看起来像这样:
sourceSets {
[flavor1, flavor2, flavor3 ...].each { AndroidSourceSet ss ->
ss.assets.srcDirs = ['repo-assets/' + ss.name.split('_')[0]]
ss.res.srcDirs = ['repo-mipmap/' + ss.name.split('_')[0] , 'repo-strings/' + ss.name]
}
}
Run Code Online (Sandbox Code Playgroud)
也想像productFlavors上面提到的那样做同样的事情.
STUCK …
android android-build android-gradle-plugin android-productflavors android-sourcesets
编译错误,包含以下build.gradle详细信息:
顶层 build.gradle
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://maven.google.com' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
应用级 build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.abc"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
dataBinding {
enabled true
}
dexOptions {
javaMaxHeapSize "4g"
}
}
buildTypes {
release { …Run Code Online (Sandbox Code Playgroud) ES Strings的XML资源文件有一些更新.使用这些String更改后,Build失败并显示以下错误:
Error:com.github.javaparser.TokenMgrError: Lexical error at line 5563, column 57. Encountered: "\u00b3" (179), after : ""
Run Code Online (Sandbox Code Playgroud)
该错误表明该问题与Superscript char\u00b3有关,但是,我没有在资源文件中添加它.
要调试此问题,我使用stacktrace直接从终端运行Gradlew,它提供了以下详细信息:
Caused by: com.github.javaparser.TokenMgrError: Lexical error at line 5563, column 57. Encountered: "\u00b3" (179), after : ""
at com.github.javaparser.ASTParserTokenManager.getNextToken(ASTParserTokenManager.java:2480)
at com.github.javaparser.ASTParser.jj_scan_token(ASTParser.java:9115)
at com.github.javaparser.ASTParser.jj_3R_92(ASTParser.java:5504)
at com.github.javaparser.ASTParser.jj_3_5(ASTParser.java:5574)
at com.github.javaparser.ASTParser.jj_2_5(ASTParser.java:5198)
at com.github.javaparser.ASTParser.ClassOrInterfaceBodyDeclaration(ASTParser.java:944)
at com.github.javaparser.ASTParser.ClassOrInterfaceBody(ASTParser.java:865)
at com.github.javaparser.ASTParser.ClassOrInterfaceDeclaration(ASTParser.java:470)
at com.github.javaparser.ASTParser.ClassOrInterfaceBodyDeclaration(ASTParser.java:932)
at com.github.javaparser.ASTParser.ClassOrInterfaceBody(ASTParser.java:865)
at com.github.javaparser.ASTParser.ClassOrInterfaceDeclaration(ASTParser.java:470)
at com.github.javaparser.ASTParser.TypeDeclaration(ASTParser.java:398)
at com.github.javaparser.ASTParser.CompilationUnit(ASTParser.java:203)
at com.github.javaparser.JavaParser.parse(JavaParser.java:111)
at com.github.javaparser.JavaParser.parse(JavaParser.java:158)
at com.github.javaparser.JavaParser.parse(JavaParser.java:177)
at butterknife.plugin.FinalRClassBuilder.brewJava(FinalRClassBuilder.java:36)
at butterknife.plugin.FinalRClassBuilder$brewJava.call(Unknown Source)
at butterknife.plugin.ButterKnifePlugin$_apply_closure1$_closure2$_closure3$_closure4.doCall(ButterKnifePlugin.groovy:34)
at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:596)
at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:577)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95) …Run Code Online (Sandbox Code Playgroud)