20190917 Android 编译遇到的若干问题

下载别人的github源码来编译,都编译不过?

下了android工程netGuard然后,找一个合适(强调是因为我对代码管理相当混乱)的地方解压它
gradle build时提示:

  • errorno-such-property-gradleversion-for-class-jetgradleplugin 看了错误提示隐隐约约 (https://stackoverflow.com/a/54517820 ) 觉得是AS版本太旧了,毕竟几年没打开用了;遂根据提示更新下AS再build,不提示这个错了。
  • 开始提示res xml文件中xxx属性不存在,想到我改了人家的compileSdkVersion和targetSdkVersion,人家是29,最新的android10 (遂安装相应的SDK,多瞅瞅绿色运行按钮的右边),我改小了(因为我想着改小以适应我的Android7.0,咦,真笨呐,minSdkVersion和compatibility是什么意思来着?),改回去。
  • build没问题了,可咋没生成apk出现呢?插上手机,明明powershell adb devices都能看到我的手机,为啥AS就不行呢?核实下任务管理器adb所在的正是位于Android SDK Location设置的子目录,应该没问题呀! 后来打开资源管理器,任务管理器,看到当启动AS时adb都没被启动,一定有问题;点了troubleshoot on connection 也不管用;再一看,运行的下新建一个Android App的配置,module也没有,且不可选,搞什么啊!后来bing到SOF,人家说(https://stackoverflow.com/questions/29087882/android-studio-run-debug-configuration-error-module-not-specified),先删掉setting.gradle中的includ':app'让它同步一次,再加上这句,再同步,果不其然,就好了,构建按钮那里也自己出现了!app然后就可以点击,就在手机上安装了调试版了.
  • 可是要给别人用,这个apk并不能直接安装,得release!终于在Build里面找到Generate Signed..后又出现问题:看起来和IDE相关的一个maven依赖找不到!Could not find org.jetbrains.trove4j:trove4j:20160824.是没搞明白Gradle工程中的google(),Jcenter(),mavenCenteral()的含义,搞明白后,给maven换源就行了;因为下面的错误提示很详细,xxx链接 404,说明在相应的中央仓库里没有找到这个包。换一个源就好了,比如ali:
maven {
 url'http://maven.aliyun.com/nexus/content/groups/public/' 
 }
jenter {
 url'http://maven.aliyun.com/nexus/content/repositories/jcenter'
}

20200315 补充 注意是换 allprojects { repositories { xxx }}中的jcentermaven

  • 又遇到一个问题是:DSL element 'useProguard' is obsolete and will be removed soon. Use 'android,此时在gradle.properties中加入android.enableR8 = true即可,具体原理就不追究了。
  • 20210123 补充 Android Studio离线更新
    Android studio 太旧,提示工程不适用,就要安装更新包;安装更新包时连接容易被reset(你说国内学个数字洋玩意儿怎么就这么麻烦呢?),复制错误日志中的下载链接自己下载,然后 cd 到 Android Studio安装目录进行安装, java -classpath "path_to_download_jar" com.intellij.updater.Runner install . https://www.jianshu.com/p/465b0234142b
  • 编译与分发
    通过usb安装的debug版本分享给别人安装会失败,必须要是签名了的release版本,但是release版本没有高级功能(要付费)也没有从module的build.gradle 配置文件中看出什么猫腻(它的release和debug配置是一样的),所以开发一个有高级付费功能的app应该怎么设计呢? 于是百度得,只要构建一个双重签名(jar签名和apk签名,AS构建时会询问)的debug版本也是可以给别人安装的。先这么搞吧。
  • gradle包安装
    自己下载的gradle包需要放在C:\Users\username\.gradle\wrapper\dists下,下载链接看请看AS日志,再通过其他不可告人的方式下载gradle包。

20221204补充

  • 下载了最新的2.303版本,需要升级AS版本、需要升级Gradle版本,居然还要升级JDK,于是没搞了

  • 退回到2.290版本,升级了compileSDK至31,Android 12,则安装失败:-208 搜索得是标记了intent-filter的Activity、Service等AndroidManifest.xml需要指定 android:exported="false",包括依赖的SDK;target、min、compile的关系 zhihuPic

  • 再次编译debug版本时报错:Entry name 'res/layout/resolving.xml' collided build时debug换个目录就好,不要再默认的app目录下

  • 新问题,打不开,桌面点击没反应。ADB看日志是创建Service Flag不对,于是自己修 private static final int PENGDING_INTENT_FLAGS = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE; 替换原来的PendingIntent.FLAG_UPDATE_CURRENT 可以打开App了,但是功能有问题,点击开关又闪退,我还是升级JDK用新版吧。

  • 关于Gradle镜像的设置 https://developer.aliyun.com/mvn/guide 设置了还是有一堆404,这种问题时常心里骂有些人,管理者和一百年前、两千年前一点区别都没有,一点长进都没有。
    `
    20230312 补充

  • 手动下载gradle的正确放置路径: gradle\wrapper\dists\gradle-7.2-bin\2dnblmf4td7x66yl1d74lt32g\gradle-7.2\bin

  • 报错:Caused by: java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;.... at androidx.core.view.ViewCompat.<clinit>(ViewCompat.java:2852) 表示katolin中使用了lambda,但是gradle app配置中指定的仍然是java7,于是修改app的gradle配置中android标记下为java8
    compileOptions JavaVersion.VERSION_1_8

  • 报错groovy.lang.MissingMethodException: No signature of method: build_3g0wpx2t6cqukmc4qxlwyosye.android() is applicable for argument types: (build_3g0wpx2t6cqukmc4qxlwyosye gradle sync时这里虽然指出是app的gradle.build文件有问题,但是方法名字是混淆过的,不知道是哪个方法,行数显示是android字段那一行,重启IDE不管用,对比大法:和原始下载的zip文件对比,原来不小心删掉了android下的一个key: buildTypes

  • finally: APK(s) generated successfully for module 并且找到了判断专业版的逻辑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值