标签: android-build

我可以在不使用库的情况下在Android项目之间共享代码和资源吗?

在Android项目之间共享代码和资源的标准建议是使用库.就个人而言,如果(a)共享代码发生了很大变化,或者(b)您的计算机速度不够快,我发现这种方法效果不佳.

我也不想进入部署多个APK,这在使用依赖项目(即Java Build Path,Projects选项卡)时似乎是必要的.

另一方面,使用Eclipse链接源功能共享源代码文件夹效果很好(Java Build Path,Source选项卡,Link Source按钮),但是对于这两个问题:

1)我不能使用相同的技术来共享资源.我可以创建资源父文件夹的链接,但事情变得很糟糕,共享资源不会被编译(我正在使用ADT 21).

2)因此,我决定将共享资源复制到每个项目中,但这不起作用.共享代码无法导入其资源的副本,因为它不知道使用它的项目的包名称.我一直在使用的解决方案是动态访问资源,但随着资源数量的增加,这变得很麻烦.

所以,我需要(1)或(2)的解决方案,否则我将不得不回到图书馆项目.(或许我还有其他选择没有想过?)

eclipse android android-build

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

如何使用"android update"命令添加"android.library = true"

我想从命令行构建一个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 projectandroid update lib-project旁边我不能在lib-project中使用一些标志?

build-automation android project android-build

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

Android库声明样式运行时错误

我有一个库,在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)

android maven android-build android-gradle-plugin aar

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

在变体中更改resValue

我有两种产品口味和三种构建类型.

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

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

Android Studio:Gradle build错误:169.254/16 |*.169.254/16.将忽略这些主机的代理设置

几个星期前我安装了Android Studio,我能够创建新的项目,他们建立得很好,我让他们运行.当我创建一个新项目时,gradle不会构建,因为我得到了6个这样的错误:

错误:169.254/16 |*.169.254/16.将忽略这些主机的代理设置.

这就是它所说的.我尝试在线查找信息,甚至在这里,但我发现此错误没有任何用处.有人提到它与他们的DNS设置有关,但没有关于如何修复它.我仍然可以运行和构建我的旧项目.我不能建立任何新的.

我非常感谢这方面的帮助,因为我无法继续推进我的项目.谢谢

android android-build android-studio android-gradle-plugin

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

在Gradle Android版本中排除本机库

与此主题上的许多其他帖子相反,我想从使用Gradle的Android版本中排除本机库.

libfoo.so驻留在默认目录中的库项目中thelib/src/main/jniLibs.在我的主项目的build.gradle中,我尝试按如下方式排除文件:

sourceSets {
    all{
        jniLibs {
            exclude '**/libfoo.so'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,文件仍在最终的APK中.我已经尝试了不同的路径规范,但它们都不起作用.

这甚至可能,还是有解决方法?

android android-ndk android-build android-gradle-plugin

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

Android NDK集成:错误:无法加载类BuildType $ Impl

我正在尝试将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)

android android-ndk android-build android-gradle-plugin

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

使用CSV/TXT文件中的名称列表(带属性)动态生成productFlavors和sourceSets

这个问题继续我的另一个问题,我想进一步改进.

我能够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]是否可以从以下任何一个中提取:

  • 一个XML文件,我可以通过它来迭代以获得所有的味道(我将放在那里)
  • 一个CSV文件,我可以通过它迭代并获取值.
  • 一个自定义类,我可以在一个单独的文件中编写,并从类中的静态成员中获取数据.

除了风味名称,我打算将以下内容存储在外部源(上面的一个)中:

  • 应用程序ID(我将拉到productFlavors)
  • 广告单元ID(每种风格两个)
  • 一些其他自定义值,如类别等.

PORPOSE: 我想写一个通用的代码片段来迭代并动态创建productFlavorssourceSets.我已经推广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

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

Android Studio 3.0的DexArchiveMergerException

编译错误,包含以下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)

android android-build android-studio-3.0

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

Gradle Build因任务"processBasicDebugResources"错误而失败:com.github.javaparser.TokenMgrError

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)

android gradle android-build android-gradle-plugin

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