java - Gradle编译:找不到包
问题描述
为了调试 OTGViewer,我正在尝试将一个项目(IGLogger)包含到另一个项目(OTGViewer)中。所以我重写了 IGLogger,所以它将函数(Log.d 等)的调用转储到一个文件中,现在我正试图将它包含到 OTGViewer 中:
//import android.util.Log;
import com.iglogger.iglogger;
然而,在做“gradle build --debug”时,我有:
[root@v48807 OTGViewer]# cat err.log
5889:23:46:03.189 [ERROR] [system.err] /var/projects/.otg/OTGViewer/mobile/src/main/java/com/androidinspain/otgviewer/MainActivity.java:18: error: package com.iglogger does not exist
5890:23:46:03.195 [ERROR] [system.err] import com.iglogger.iglogger;
5891:23:46:03.195 [ERROR] [system.err] ^
5901:23:46:09.426 [ERROR] [system.err] /var/projects/.otg/OTGViewer/mobile/src/main/java/com/androidinspain/otgviewer/MainActivity.java:72: error: cannot find symbol
5902:23:46:09.426 [ERROR] [system.err] Log.d(TAG, "onCreate");
5903:23:46:09.434 [ERROR] [system.err] ^
5904:23:46:09.440 [ERROR] [system.err] symbol: variable Log
5905:23:46:09.441 [ERROR] [system.err] location: class MainActivity
5906:23:46:09.644 [ERROR] [system.err] /var/projects/.otg/OTGViewer/mobile/src/main/java/com/androidinspain/otgviewer/MainActivity.java:111: error: cannot find symbol
5907:23:46:09.659 [ERROR] [system.err] Log.d(TAG, "No transition needed. Already in that fragment!");
5917:23:46:09.666 [ERROR] [system.err] ^
5918:23:46:09.666 [ERROR] [system.err] symbol: variable Log
然而,我实际上是用 iglogger 创建了 jar 并将其安装在本地 Maven 存储库中:
[root@v48807 IGLogger]# cat compile.sh
#!/usr/bin/env bash
set -e
set -o errexit
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)"
cd $DIR
#javac -bootclasspath /opt/android-sdk/platforms/android-26/android.jar iglogger.java
#javac -sourcepath /opt/android-sdk/platforms/android-26/android.jar iglogger.java
javac -source 1.8 -target 1.8 com/iglogger/iglogger.java
dx --dex --output=iglogger.dex com/iglogger/iglogger.class
#baksmali iglogger.dex
#java -jar /var/projects/.otg/smali/baksmali/build/libs/baksmali.jar disassemble iglogger.dex
apktool.sh b . -o iglogger.apk
apktool.sh d iglogger.apk -f -o iglogger-unpacked
rm -rf iglogger.apk
mv iglogger-unpacked/smali_iglogger/com/iglogger/iglogger.smali .
rm -rf iglogger-unpacked/
cd com/iglogger
jar cf iglogger.jar iglogger.class
(我还在上面生成了一个 smali 文件,但想法是创建一个 jar 文件并将代码作为一个包安装在存储库中——见下文)
[root@v48807 IGLogger]# cat mvn-install.sh
#!/usr/bin/env bash
mvn install:install-file -Dfile=com/iglogger/iglogger.jar -DgroupId=com.iglogger -DartifactId=iglogger -Dversion=0.0.1 -Dpackaging=jar
我还修改了 OTGViewer 的 gradle 文件以声明存在依赖项和新的 repo:
[root@v48807 OTGViewer]# cat build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
mavenLocal()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
google()
mavenLocal()
}
}
[root@v48807 OTGViewer]# cat mobile/build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.androidinspain.otgviewer"
minSdkVersion 16
targetSdkVersion 22
versionCode 2
versionName "1.1"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions{
abortOnError false
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
dependencies {
compile 'com.github.mjdev:libaums:0.5.5'
compile 'com.android.support:appcompat-v7:26.0.1'
compile 'com.android.support:design:26.0.1'
compile 'com.android.support:recyclerview-v7:26.0.1'
compile 'com.iglogger:iglogger:0.0.1'
}
[root@v48807 OTGViewer]#
那么我错过了什么?
编辑: 好的。我确保 iglogger 的 jar 在 javac 的 -classpath 参数中并且文件存在:
[root@v48807 OTGViewer]# gradle build --stacktrace --debug &> debug.log
[root@v48807 OTGViewer]# cat debug.log | grep classpath | grep -n iglogger > iglogger.log && vi iglogger.log
[root@v48807 OTGViewer]# ls /root/.m2/repository/com/iglogger/iglogger/0.0.1/iglogger-0.0.1.jar
-rw-r--r-- 1 root root 8319 Feb 17 21:10 /root/.m2/repository/com/iglogger/iglogger/0.0.1/iglogger-0.0.1.jar
[
[root@v48807 ~]#
因此,如果该文件存在,那么可能出了什么问题?为什么它不被识别为一个包?我通过导入指令正确导入它,对吗?
解决方案
推荐阅读
- amazon-s3 - COPY INTO 雪花表未加载数据 - 无错误
- angular - Firestore 添加集合
- java - 尝试使用方法创建驾驶执照考试程序
- python - 网页抓取 Google 时转到下一页
- php - 查看 laravel auth/user 对象中是否存在某些东西
- python - 使用硒(Python)接收后打印和存储元素
- git - 通过单个 SSH 会话进行多个远程 git 操作?
- laravel - 如何将 sass 和 less 文件与 laravel-mix 正确组合?
- xml - Intellij 的想法 - 任何将 xml bean 转换为 spring 的 autowiing 注释的工具?
- python - 如何从 TensorFlow 中的这些张量中提取值?