Gradle 将项目转换为模块后失败
Gradle fails after converting project into module
我正在尝试将 PDFNet 库集成到我的 Android 应用程序中,如果您下载 SDK,您会看到有一个项目 CompleteReader (PDFNetAndroid-6.7.0. 42960\PDFNetAndroid\samples\PDFViewCtrlProjects\CompleteReader)
我想将此项目用作我的应用程序中的模块,所以我将 build.gradle "com.android.application" 更改为 "com.android.library"
此处原文build.gradle:
description = 'This is a more complete demo app that showcases PDFViewCtrl and the Tools library and its controls.'
apply plugin: 'com.android.application'
repositories {
mavenCentral()
}
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
classpath 'com.trello:victor:0.1.4'
}
}
apply plugin: 'com.android.application'
apply plugin: 'com.trello.victor'
dependencies {
compile fileTree(include: '*.jar', dir: 'libs')
compile project(':PDFViewCtrlTools')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.tonicartos:superslim:0.4.13'
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0.0"
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
jniLibs.srcDirs = ['libs']
svg.srcDir 'src/main/svg'
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
// Set package name to <app package>.debug to be able to install both debug and release apk on the same device
applicationIdSuffix ".debug"
}
}
lintOptions {
// If true, stop the gradle build if errors are found
abortOnError false
//ignore 'ValidFragment'
}
productFlavors {
armv7a {
ndk {
abiFilters "armeabi-v7a"
}
}
arm {
ndk {
abiFilters "armeabi"
}
}
x86 {
ndk {
abiFilters "x86"
}
}
armv8 {
ndk {
abiFilters "arm64-v8a"
}
}
x86_64 {
ndk {
abiFilters "x86_64"
}
}
fat {
ndk {
abiFilters "armeabi-v7a", "armeabi", "arm64-v8a", "x86", "x86_64"
}
}
}
}
task copyLibsToSamples << {
['libs'
].each { dest ->
copy {
from ('../../../lib/full') {
include '**/*.so'
}
into dest
}
}
}
task copyJarToSamples(type: Copy) {
['../../../lib/src/PDFViewCtrlTools/libs'
].each { dest ->
copy {
from ('../../../lib') {
include 'PDFNet.jar'
}
into dest
}
}
}
task copyResources << {
['res/raw'].each { dest ->
copy {
from ('../../../resource') {
include '*.plugin'
}
into dest
}
}
}
task setupSample(dependsOn: [copyLibsToSamples, copyJarToSamples, copyResources])
preBuild.dependsOn setupSample
这个原始文件编译没有问题,但是随着对库的更改它不会构建,所以我删除了以下我在某处读到的可能是问题的内容:
repositories {
mavenCentral()
}
好的,通过这个更改似乎可以继续构建,我得到的下一个错误是以下两个无法解决的引用(这在原始文件未修改的情况下都有效!!!):
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.tonicartos:superslim:0.4.13'
我已经在这个文件中尝试了很多东西已经几天没有运气,我删除了所有不需要的部分,移动了 jcenter 和 mavencentral,添加它们,删除它们等等。
这是我当前的 build.gradle 也不起作用:
description = 'This is a more complete demo app that showcases PDFViewCtrl and the Tools library and its controls.'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.trello:victor:0.1.4'
}
}
apply plugin: 'com.android.library'
apply plugin: 'com.trello.victor'
dependencies {
repositories {
mavenCentral()
jcenter()
}
compile fileTree(include: '*.jar', dir: 'libs')
compile project(':PDFViewCtrlTools')
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile project(':superslim-0.4.13')
compile 'com.jakewharton:butterknife:7.0.1'
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
jniLibs.srcDirs = ['libs']
svg.srcDir 'src/main/svg'
}
}
lintOptions {
// If true, stop the gradle build if errors are found
abortOnError false
//ignore 'ValidFragment'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.2'
}
无论我更改什么,模块都无法编译,任务执行失败 CompleteReader:compileDebugJavaWithJavac 并且未生成 R,所以我得到很多 "constant expression required"。我重复一遍,在将 "application" 更改为 "library" 之前一切正常,我可以在我的 phone 上安装项目,等等
你知道哪里出了问题吗?我已经为此工作了 3 天,但运气不佳!
问题似乎出在 butterknife 上。
在 PDFNet Android SDK 的未来版本中,为了用户的方便,我们将在任何示例项目中删除 butterknife。
同时,我们建议您在 CompleteReader 示例项目中删除对 butterknife 的使用。为此:
- 按照自述文件中的描述打开 CompleteReader 示例项目
- 从 CompleteReader 的
build.gradle
文件中删除 compile 'com.jakewharton:butterknife:7.0.1'
尝试编译源代码时解决所有错误,即在 BaseFileAdapter.java
中将 ContentViewHolder
class 更改为以下内容:
static class ContentViewHolder extends RecyclerView.ViewHolder {
ImageView imageViewFileIcon;
ImageView imageViewFileLockIcon;
TextView textViewFileName;
TextView textViewFileInfo;
ImageView imageViewFavoriteIcon;
ImageView imageViewInfoIcon;
View infoButton;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public ContentViewHolder(View itemView) {
super(itemView);
imageViewFileIcon = (ImageView) itemView.findViewById(R.id.file_icon);
imageViewFileLockIcon = (ImageView) itemView.findViewById(R.id.file_lock_icon);
textViewFileName = (TextView) itemView.findViewById(R.id.file_name);
textViewFileInfo = (TextView) itemView.findViewById(R.id.file_info);
imageViewFavoriteIcon = (ImageView) itemView.findViewById(R.id.favorite_icon);
imageViewInfoIcon = (ImageView) itemView.findViewById(R.id.info_icon);
infoButton = itemView.findViewById(R.id.info_button);
if (Utils.isJellyBeanMR1() && textViewFileName != null && textViewFileInfo != null) {
// instead of creating a different layout for v17 we set alignment in the code:
if (textViewFileName.getGravity() != Gravity.CENTER) {
textViewFileName.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
}
textViewFileName.setTextDirection(View.TEXT_DIRECTION_LTR);
textViewFileInfo.setTextDirection(View.TEXT_DIRECTION_LOCALE);
}
}
}
对使用 butterknife
的所有其他 UI 组件执行上述操作
- 项目编译正常后将应用程序转换为库
我正在尝试将 PDFNet 库集成到我的 Android 应用程序中,如果您下载 SDK,您会看到有一个项目 CompleteReader (PDFNetAndroid-6.7.0. 42960\PDFNetAndroid\samples\PDFViewCtrlProjects\CompleteReader) 我想将此项目用作我的应用程序中的模块,所以我将 build.gradle "com.android.application" 更改为 "com.android.library"
此处原文build.gradle:
description = 'This is a more complete demo app that showcases PDFViewCtrl and the Tools library and its controls.'
apply plugin: 'com.android.application'
repositories {
mavenCentral()
}
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
classpath 'com.trello:victor:0.1.4'
}
}
apply plugin: 'com.android.application'
apply plugin: 'com.trello.victor'
dependencies {
compile fileTree(include: '*.jar', dir: 'libs')
compile project(':PDFViewCtrlTools')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.tonicartos:superslim:0.4.13'
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0.0"
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
jniLibs.srcDirs = ['libs']
svg.srcDir 'src/main/svg'
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
// Set package name to <app package>.debug to be able to install both debug and release apk on the same device
applicationIdSuffix ".debug"
}
}
lintOptions {
// If true, stop the gradle build if errors are found
abortOnError false
//ignore 'ValidFragment'
}
productFlavors {
armv7a {
ndk {
abiFilters "armeabi-v7a"
}
}
arm {
ndk {
abiFilters "armeabi"
}
}
x86 {
ndk {
abiFilters "x86"
}
}
armv8 {
ndk {
abiFilters "arm64-v8a"
}
}
x86_64 {
ndk {
abiFilters "x86_64"
}
}
fat {
ndk {
abiFilters "armeabi-v7a", "armeabi", "arm64-v8a", "x86", "x86_64"
}
}
}
}
task copyLibsToSamples << {
['libs'
].each { dest ->
copy {
from ('../../../lib/full') {
include '**/*.so'
}
into dest
}
}
}
task copyJarToSamples(type: Copy) {
['../../../lib/src/PDFViewCtrlTools/libs'
].each { dest ->
copy {
from ('../../../lib') {
include 'PDFNet.jar'
}
into dest
}
}
}
task copyResources << {
['res/raw'].each { dest ->
copy {
from ('../../../resource') {
include '*.plugin'
}
into dest
}
}
}
task setupSample(dependsOn: [copyLibsToSamples, copyJarToSamples, copyResources])
preBuild.dependsOn setupSample
这个原始文件编译没有问题,但是随着对库的更改它不会构建,所以我删除了以下我在某处读到的可能是问题的内容:
repositories {
mavenCentral()
}
好的,通过这个更改似乎可以继续构建,我得到的下一个错误是以下两个无法解决的引用(这在原始文件未修改的情况下都有效!!!):
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.tonicartos:superslim:0.4.13'
我已经在这个文件中尝试了很多东西已经几天没有运气,我删除了所有不需要的部分,移动了 jcenter 和 mavencentral,添加它们,删除它们等等。 这是我当前的 build.gradle 也不起作用:
description = 'This is a more complete demo app that showcases PDFViewCtrl and the Tools library and its controls.'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.trello:victor:0.1.4'
}
}
apply plugin: 'com.android.library'
apply plugin: 'com.trello.victor'
dependencies {
repositories {
mavenCentral()
jcenter()
}
compile fileTree(include: '*.jar', dir: 'libs')
compile project(':PDFViewCtrlTools')
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile project(':superslim-0.4.13')
compile 'com.jakewharton:butterknife:7.0.1'
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
jniLibs.srcDirs = ['libs']
svg.srcDir 'src/main/svg'
}
}
lintOptions {
// If true, stop the gradle build if errors are found
abortOnError false
//ignore 'ValidFragment'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.2'
}
无论我更改什么,模块都无法编译,任务执行失败 CompleteReader:compileDebugJavaWithJavac 并且未生成 R,所以我得到很多 "constant expression required"。我重复一遍,在将 "application" 更改为 "library" 之前一切正常,我可以在我的 phone 上安装项目,等等
你知道哪里出了问题吗?我已经为此工作了 3 天,但运气不佳!
问题似乎出在 butterknife 上。 在 PDFNet Android SDK 的未来版本中,为了用户的方便,我们将在任何示例项目中删除 butterknife。
同时,我们建议您在 CompleteReader 示例项目中删除对 butterknife 的使用。为此:
- 按照自述文件中的描述打开 CompleteReader 示例项目
- 从 CompleteReader 的
build.gradle
文件中删除compile 'com.jakewharton:butterknife:7.0.1'
尝试编译源代码时解决所有错误,即在
BaseFileAdapter.java
中将ContentViewHolder
class 更改为以下内容:static class ContentViewHolder extends RecyclerView.ViewHolder { ImageView imageViewFileIcon; ImageView imageViewFileLockIcon; TextView textViewFileName; TextView textViewFileInfo; ImageView imageViewFavoriteIcon; ImageView imageViewInfoIcon; View infoButton; @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public ContentViewHolder(View itemView) { super(itemView); imageViewFileIcon = (ImageView) itemView.findViewById(R.id.file_icon); imageViewFileLockIcon = (ImageView) itemView.findViewById(R.id.file_lock_icon); textViewFileName = (TextView) itemView.findViewById(R.id.file_name); textViewFileInfo = (TextView) itemView.findViewById(R.id.file_info); imageViewFavoriteIcon = (ImageView) itemView.findViewById(R.id.favorite_icon); imageViewInfoIcon = (ImageView) itemView.findViewById(R.id.info_icon); infoButton = itemView.findViewById(R.id.info_button); if (Utils.isJellyBeanMR1() && textViewFileName != null && textViewFileInfo != null) { // instead of creating a different layout for v17 we set alignment in the code: if (textViewFileName.getGravity() != Gravity.CENTER) { textViewFileName.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); } textViewFileName.setTextDirection(View.TEXT_DIRECTION_LTR); textViewFileInfo.setTextDirection(View.TEXT_DIRECTION_LOCALE); } } }
对使用 butterknife
的所有其他 UI 组件执行上述操作
- 项目编译正常后将应用程序转换为库