下载别人的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 }}
中的jcenter
和maven
- 又遇到一个问题是:
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
gradlesync
时这里虽然指出是app的gradle.build文件有问题,但是方法名字是混淆过的,不知道是哪个方法,行数显示是android字段那一行,重启IDE不管用,对比大法:和原始下载的zip文件对比,原来不小心删掉了android下的一个key: buildTypes -
finally: APK(s) generated successfully for module 并且找到了判断专业版的逻辑!