开发实践中遇到的一些问题及答案(Android篇三)

Some problems encountered and their answers in work (Android Chapter)


仗义执言:在开发阶段由于服务器的Gradle更换为7以上,因此将Gradle升级到7以上,更新JDK11/17并使用Android Studio Flamingo |2022.2.1编译之前在Gradle4.1.2,JDK8上的Kotlin项目会出现部分在Kotlin项目创建的java类(Java类中使用到了自定义Framework.jar的自定义方法以及一些hide方法)一直报java类中引用的这些方法的error: cannot find symbol错误,如error: cannot find symbol mRadioManager =(RadioManager)ctx.getSystemService(Context.RADIO_SERVICE),开始以为是项目的环境配置问题或者是编译的Framework.jar不适配Gradle7以上或者JDK11,尝试了各种原因都无法得到解决,后来发现将此Java类换为Kotlin类后报错消失,之后又尝试将之前Gradle4.1.2,JDK8上的纯Java项目(Java类中使用到了自定义Framework.jar的自定义方法以及一些hide方法)同样升级到以上相同环境并不会报相关错误。具体原因不得而知,有大佬知道问题缘由请指点一二,甚是感谢!

各个版本Android Studio下载:
https://developer.android.google.cn/studio/archive?hl=zh-cn

Android Cannot query the value of property ‘namespace’ because configuration of project ‘:app’ has not completed yet.这个异常是什么引起的

这个异常是由于在您的Gradle构建过程中,项目的配置还没有完成。这可能是因为您正在访问尚未构建的变量或属性,或者是因为Gradle正在等待某些依赖项的下载或依赖项的配置还没有完成。
 要解决这个问题,可以尝试以下步骤:
1. 确认您的Gradle版本是否正确,建议使用最新的Gradle版本。
2. 清除您的项目构建缓存,可以使用以下命令进行清除:
./gradlew clean
3. 确认您的依赖项是否正确配置,检查您的build.gradle文件是否正确。
4. 确认您的Android Studio是否已经更新到最新版本。
5. 如果您的项目包含多个子模块,请确保每个子模块的Gradle文件都已经正确配置。
 如果您仍然遇到问题,可以尝试调试您的Gradle构建脚本,找出导致问题的具体位置,并进行相应的修复。

升级到Gradle7以上的版本后出现error: cannot find symbol mRadioManager = (RadioManager)ctx.getSystemService(Context.RADIO_SERVICE);的异常如何解决

当从较旧的Gradle版本升级到7.x版本时,您可能会遇到类似“cannot find symbol”的编译错误。这是因为7.x版本的Gradle使用了新的Java编译器(Javac)和新的Java库。这些变化导致了一些依赖库或项目代码的编译错误。对于您遇到的错误,可以尝试以下方法进行解决:
 1. 更新您的项目代码,使其与最新版本的Gradle和Android SDK兼容。
2. 检查您是否导入了正确的类和包。在这种情况下,您需要检查是否导入了正确的RadioManager类和Context类。
3. 如果您使用的是Android Studio,可以尝试执行“File -> Invalidate Caches / Restart”操作,这有时可以解决Gradle更新后的编译错误。
4. 检查您的build.gradle文件中是否正确指定了Gradle插件版本和Android Gradle插件版本。
 如果以上方法仍然无法解决问题,请尝试将Gradle版本降级到之前的版本,以确定问题是否由Gradle版本升级引起的。您可以在build.gradle文件中指定旧版本的Gradle,如下所示:
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        //其他依赖项
    }
}
这将使用3.6.3版本的Gradle进行构建。如果您使用旧版本的Gradle仍然遇到问题,则建议您在Gradle升级之前解决这些问题,并确保您的项目代码和依赖项与升级后的Gradle版本兼容。

Android Studio工程JDK更新到11后出现以下异常error: cannot find symbol如何处理

当您将Android Studio工程的JDK更新到11后,在编译代码时可能会出现“cannot find symbol”等异常。这是由于您的代码依赖的库或项目代码与新的JDK版本不兼容所致。要解决这个问题,您可以尝试以下几个步骤:
1. 确认您的项目中使用的所有库和依赖项是否支持JDK 11。您可以查看它们的文档或更新日志,以确定它们是否支持最新的JDK版本。如果不支持,请考虑使用更早版本的JDK(如JDK 8)进行编译。
2. 检查您的项目代码中是否使用了不推荐的API或语言特性。从Java 9开始,一些API已被弃用或删除,因此在更新JDK版本时可能会导致编译错误。确保您的代码不依赖不推荐使用的API和语言特性,例如sun.misc.Unsafe类和Unsafe类的方法。
3. 如果您的项目使用了自定义的Gradle任务,请检查它们是否与JDK 11兼容。某些Gradle任务可能需要特定的JDK版本才能正常运行。您可以查看Gradle文档以获取更多信息。
4. 确认您正在使用正确的JDK版本。在Android Studio中,您可以选择使用哪个JDK版本来编译您的项目。请确保您选择的JDK版本与您的项目和依赖项兼容。您可以通过以下步骤更改使用的JDK版本:
   a. 打开项目结构对话框(File -> Project Structure)。
   b. 选择“SDK Location”选项卡,并选择适当的JDK版本。
   c. 点击“OK”以保存更改并关闭对话框。
5. 如果以上步骤无法解决问题,请尝试清除项目缓存并重新编译项目:
    a. 在Android Studio中,选择“File -> Invalidate Caches / Restart”。
    b. 点击“Invalidate and Restart”以清除Android Studio缓存,并重新启动Android Studio。
    c. 重新编译您的项目以查看是否解决了问题。

Android Studio工程JDK更新到11后引用的framework.jar失效

当您将Android Studio工程的JDK更新到11后,可能会出现引用的framework.jar失效的情况。这是由于Java 11与旧版的Java编译器和框架之间不兼容所导致的。要解决这个问题,您可以尝试以下几个步骤:
 1. 检查您的项目中是否有使用过时的API或语言特性。 在不同的Java版本之间,可能会弃用或删除某些API或语言特性,这可能会使项目中的某些代码无效。 请检查您的项目代码并确保使用当前版本的API和语言特性。
 2. 使用最新版本的框架。 如果您的项目中使用的框架不支持Java 11,则可能会引发问题。 请检查您的项目中使用的框架的文档,并尝试更新到最新版本,以便与Java 11兼容。
 3. 更新依赖项。 与框架一样,如果您的项目中使用的依赖项不支持Java 11,则可能会引发问题。 尝试更新您的依赖项,并确保它们与Java 11兼容。
 4. 检查您的项目配置。 您可以检查您的项目配置文件,确保使用的JDK版本正确。 您可以通过以下步骤检查项目配置:
    a. 打开项目结构对话框(File -> Project Structure)。
    b. 选择“Project Settings”选项卡,并检查您的“Project SDK”设置是否为Java 11。
    c. 检查“Modules”选项卡中的模块设置,并确保使用的是Java 11。
    d. 点击“OK”以保存更改并关闭对话框。
 5. 在gradle文件中添加下列语句
compileOptions {
       sourceCompatibility JavaVersion.VERSION_11
       targetCompatibility JavaVersion.VERSION_11
   }

Android Studio编译出现 class file for org.xmlpull.v1.XmlPullParser not found异常

当您在使用Android Studio编译时出现 "class file for org.xmlpull.v1.XmlPullParser not found" 异常时,这通常表示您的项目依赖项中未正确包含 XmlPullParser 的引用。
 为解决此问题,您可以尝试以下方法:
 1. 检查项目依赖项。
 请确保项目依赖项中包含正确的 XmlPullParser 引用。您可以在项目的 build.gradle 文件中查找此依赖项。
 例如,对于 Android 应用程序,您应该在 build.gradle 文件中添加以下依赖项:
implementation 'org.xmlpull:xmlpull:1.1.3.1'
如果您已经添加了该依赖项,请尝试更新版本并重新编译项目。
 2. 清除 Gradle 缓存。
 有时,Gradle 缓存可能会导致依赖项无法正确加载。您可以尝试清除 Gradle 缓存并重新构建项目。
 在 Android Studio 中,您可以通过选择 "File" > "Invalidate Caches / Restart" 选项来清除 Gradle 缓存。
 3. 检查项目编译选项。
 请确保您的项目编译选项正确设置。在 Android Studio 中,您可以在项目的 build.gradle 文件中设置您的编译选项。
 例如,对于 Android 应用程序,您可以在 build.gradle 文件中添加以下编译选项:
compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
请注意,这些选项可能因不同的项目和环境而有所不同。

Android Studio配置Gradle7后引用自定义的Framework.jar无效

当您在Android Studio中使用Gradle 7配置时,如果引用自定义的Framework.jar无效,可能是因为Gradle 7默认使用了新的Java线程模型,这导致在某些情况下ClassLoader无法正确加载jar文件中的类。为了解决此问题,您可以尝试以下方法:
 1. 将jar文件添加到Classpath中
在build.gradle文件中添加以下代码,将jar文件添加到项目的Classpath中:
dependencies {
   implementation files('libs/Framework.jar')
}
2. 使用旧的Java线程模型
您可以通过在gradle.properties文件中添加以下代码,强制Gradle使用旧的Java线程模型:
org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home
org.gradle.parallel=false
3. 将Jar文件提取到项目中
您可以通过将jar文件提取到项目中来避免ClassLoader加载问题。将Framework.jar文件解压缩到项目的libs文件夹中,并在build.gradle文件中添加以下代码:
dependencies {
   implementation fileTree(dir: 'libs', include: ['*.jar'])
}

Android Studio配置JDK11后引用自定义的Framework.jar无效

当您在Android Studio中配置了JDK 11后,如果您的自定义Framework.jar引用无效,可能是因为JDK 11与旧版Java(例如Java 8)不兼容,这可能会导致Classpath加载问题。为了解决此问题,您可以尝试以下方法:
1. 使用JDK 8
建议在使用Android Studio时使用JDK 8,因为Android Studio目前只支持JDK 8。您可以在project structure中设置所需的JDK版本。
2. 将jar文件提取到项目中
将Framework.jar文件解压缩到项目的libs文件夹中,并在build.gradle文件中添加以下依赖项:
dependencies {
   implementation fileTree(dir: 'libs', include: ['*.jar'])
}
3. 尝试手动将jar文件添加到Classpath中
您可以尝试手动将jar文件添加到Classpath中。在build.gradle文件中添加以下依赖项:
dependencies {
   implementation files('libs/Framework.jar')
}

Android Studio配置Gradle7后options.compilerArgs.add(‘-Xbootclasspath/p:app/libs/framework.jar’)无效

如果您在使用Android Studio配置Gradle 7之后,通过 `options.compilerArgs.add('-Xbootclasspath/p:app/libs/framework.jar')` 添加classpath无效,可能是因为Gradle 7与旧版Gradle(例如Gradle 6)不兼容,这可能会导致Classpath加载问题。为了解决此问题,您可以尝试以下方法:
 1.将jar文件提取到项目中
 将Framework.jar文件解压缩到项目的 `libs` 文件夹中,并在 `build.gradle` 文件中添加以下依赖项:
dependencies {
   implementation fileTree(dir: 'libs', include: ['*.jar'])
}
2.将jar文件复制到build目录中
 将Framework.jar文件复制到项目的 `build` 文件夹中(例如: `app/build/libs` ),并在 `build.gradle` 文件中添加以下依赖项:
dependencies {
   implementation files('build/libs/Framework.jar')
}
3.使用 `classpath` 关键字
 在 `build.gradle` 文件中使用 `classpath` 关键字将jar文件添加到Classpath中,例如:
buildscript {
    dependencies {
        classpath files('libs/Framework.jar')
    }
}

Android Studio配置Gradle7后读取不到引用自定义Framework.jar内的方法

如果配置Gradle 7.x.x之后引用自定义Framework.jar的过程中出现了读取不到方法的问题,可能是因为混淆导致的。在Gradle 7.x.x中,默认情况下启用了Java和Kotlin代码的全局混淆,这可能会影响到您自定义的Framework.jar中的代码。可以尝试以下方法解决该问题:
 1. 在 `app/build.gradle` 文件中关闭全局混淆。例如:
buildTypes {
       release {
           minifyEnabled true
           shrinkResources true
           proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
           // 关闭全局混淆
           useProguard false
       }
   }
2. 在 `proguard-rules.pro` 文件中添加一些规则以保留Framework.jar中的重要代码。例如:
-keep class com.example.myframework.** { *; }
   # 不混淆某些类或方法
   -keep class com.example.myframework.MyClass
   -keepclassmembers class com.example.myframework.MyClass {
       public void myMethod();
   }
3. 如果Framework.jar包含了一些第三方库或SDK,可能还需要添加相关的规则以保留这些库或SDK的代码。
 通过以上步骤,您应该能够解决在Android Studio配置Gradle 7.x.x之后读取不到自定义Framework.jar内的方法的问题。

Android Studio配置Gradle7.4后读取不到引用自定义Framework.jar内的方法

如果在配置Gradle 7.4之后引用自定义Framework.jar的过程中出现了读取不到方法的问题,可能是因为混淆导致的。在Gradle 7.4中,默认情况下启用了Java和Kotlin代码的全局混淆,这可能会影响到您自定义的Framework.jar中的代码。可以尝试以下方法解决该问题:
1. 在  `app/build.gradle`  文件中关闭全局混淆。例如:
buildTypes {
         release {
            // 关闭全局混淆
            useProguard false
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
      }
   }
2. 在  `proguard-rules.pro`  文件中添加一些规则以保留 Framework.jar 中的重要代码。例如:
-keep class com.example.myframework.** { *; }
   # 不混淆某些类或方法
   -keep class com.example.myframework.MyClass
   -keepclassmembers class com.example.myframework.MyClass {
       public void myMethod();
   }
3. 如果 Framework.jar 包含了一些第三方库或 SDK,可能还需要添加相关的规则以保留这些库或 SDK 的代码。
通过以上步骤,应该能够解决在 Android Studio 配置 Gradle 7.4 之后读取不到自定义 Framework.jar 内的方法的问题。

Gradle7以上Android项目读取引入的Framework.jar报error: cannot find symbol的错误是什么原因导致的

这种错误通常是由于编译配置错误或依赖关系错误引起的。在Gradle 7以上的版本中,编译和构建过程发生了一些变化,具体的原因可能包括以下几个方面:
 1. 混淆问题:Gradle 7以上版本默认启用了全局混淆,如果您使用了自定义的Framework.jar,可能会导致一些方法或类被混淆而无法正确访问,您可以在相应的proguard文件中添加保留规则以解决此问题。
 2. 依赖关系问题:如果您的项目依赖了其他库或SDK,并且这些库或SDK与自定义的Framework.jar存在冲突或版本不兼容,请检查依赖关系并处理冲突问题。
 3. 编译配置问题:如果您的编译配置不正确,可能会导致编译器无法正确识别您引入的Framework.jar,您可以检查编译配置并确保正确设置。
 4. 缺失引入:确认您已经正确地在项目中引入了Framework.jar,并且在代码中正确地使用了它。
 
 
 这种错误通常是由于Gradle无法正确读取Framework.jar文件或者在代码中找不到所引用的符号(方法或类)引起的。以下是可能导致此问题的一些原因和解决方法: 
 1. 检查框架包是否正确导入:请确保您已正确地将Framework.jar文件导入到Android Studio项目中。您可以通过右键单击项目文件夹中的libs文件夹,选择“Add as Library”选项,然后选择Framework.jar文件来导入该库。 
 2. 检查导入的库是否正确引用:请确保您在使用该库的代码中正确引用库中的方法或类。使用该库的类应该已经被正确导入,并且您应该可以正确地访问库中的方法和变量。如果您正在使用该库的方法或者类,它们的名称必须正确拼写和大小写,否则将会出现错误。 
 3. 检查Gradle版本是否正确:Gradle 7.x版本的构建系统与之前的版本不同。可能需要更新其他Gradle相关的设置,例如使用新的Plugin API,重新配置Android Gradle插件等。请确保您已经更新了Gradle版本并根据需要进行相应的更改。 
 4. 检查Gradle依赖关系:如果您的库需要其他依赖关系(类似于其他库或模块),则您必须要在Gradle文件中正确声明这些依赖关系。这些依赖项必须在build.gradle文件中正确声明,并且在应用程序运行时进行正确的配置。 
 5. 检查库的版本:如果您使用的库是第三方库,则请确保您使用的是最新版本。旧版本可能有已知或解决的问题,这可能会导致编译或运行时错误。 
 这些是可能导致“error: cannot find symbol”错误的一些原因和解决方法。。

仗义执言:在开发阶段由于服务器的Gradle更换为7以上,因此将Gradle升级到7以上,更新JDK11/17并使用Android Studio Flamingo | 2022.2.1编译之前在Gradle4.1.2,JDK8上的Kotlin项目会出现部分在Kotlin项目创建的java类(Java类中使用到了自定义Framework.jar的自定义方法以及一些hide方法)一直报java类中引用的这些方法的error: cannot find symbol错误,如error: cannot find symbol mRadioManager = (RadioManager)ctx.getSystemService(Context.RADIO_SERVICE),开始以为是项目的环境配置问题或者是编译的Framework.jar不适配Gradle7以上或者JDK11,尝试了 各种原因都无法得到解决,后来发现将此Java类换为Kotlin类后报错消失,之后又尝试将之前Gradle4.1.2,JDK8上的纯Java项目(Java类中使用到了自定义Framework.jar的自定义方法以及一些hide方法)同样升级到以上相同环境并不会报相关错误。具体原因不得而知,有大佬知道问题缘由请指点一二,甚是感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了满足广大Android开发爱好者与从业者的学习需求,我们精心整理并上传了一份全面而实用的Android项目资源包。这份资源包内容丰富,涵盖了从基础知识到实战应用的全方位内容,旨在为开发者们提供一个便捷、高效的学习平台。 一、文件手册 资源包的文件手册部分,详细记录了Android开发的核心知识点和常用技术。无论是初学者还是有一定经验的开发者,都能从找到所需的学习资料。手册采用了简洁明了的排版方式,使得查阅更加方便快捷。同时,手册内容深入浅出,既适合新手入门,也能为老手提供有价值的参考。 二、项目实战与练习 为了让学习者能够将理论知识与实践相结合,我们特别准备了项目实战与练习部分。这部分内容包含了多个精心设计的Android项目案例,从需求分析、设计思路到实现过程,都有详细的讲解和代码示例。学习者可以通过实际操作,深入了解Android开发的整个流程,提升自己的实战能力。 此外,我们还提供了一系列练习题,旨在巩固所学知识,检验学习成果。这些练习题既有基础题,也有难度较高的挑战题,适合不同层次的学习者进行练习。 Android开发工具集 在Android开发过程,选择合适的工具能够大大提高开发效率。因此,我们整理了常用的Android开发工具集,包括开发工具、测试工具、性能优化工具等。这些工具都是经过我们精心筛选和测试的,能够帮助开发者们更加高效地进行Android开发工作。 总的来说,这份Android项目资源包是一份不可多得的学习资料,无论你是初学者还是有一定经验的开发者,都能从受益匪浅。我们希望通过这份资源包,为广大Android开发爱好者与从业者提供一个更加便捷、高效的学习平台,共同推动Android开发领域的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值