选择上面这个玩意创建的项目
坑点1 :配置的写法和不一样了
镜像的写法:
新的settings.gradle.kts中配置镜像的代码:
pluginManagement {
repositories {
mavenCentral()
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
maven("https://jitpack.io")
maven("https://maven.aliyun.com/repository/gradle-plugin")
maven("https://maven.aliyun.com/repository/releases")
maven("https://maven.aliyun.com/repository/jcenter")
maven("https://maven.aliyun.com/repository/google")
maven("https://maven.aliyun.com/repository/central")
maven("https://maven.aliyun.com/repository/public")
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
google()
// maven{
// url = uri("https://jitpack.io")
// }
maven("https://jitpack.io")
maven("https://maven.aliyun.com/repository/gradle-plugin")
maven("https://maven.aliyun.com/repository/releases")
maven("https://maven.aliyun.com/repository/jcenter")
maven("https://maven.aliyun.com/repository/google")
maven("https://maven.aliyun.com/repository/central")
maven("https://maven.aliyun.com/repository/public")
}
}
rootProject.name = "XXX" //自己的名称
include(":app")
导包的写法:
最新导包是使用toml文件来配的
比如我想导入的包是:com.github.getActivity:ShapeDrawable:3.0
那么就需要在libs.versions.toml中这样写:
。。。
shapeDrawable = "3.0"
[libraries]
。。。
shapedrawable = { group = "com.github.getActivity", name = "ShapeDrawable", version.ref = "shapeDrawable"}
。。。
在app下的build.gradle中这样使用:
dependencies {
。。。
implementation(libs.shapedrawable)
。。。
}
坑点2:导航栏的问题
这个方式创建的项目需要带导航栏 (seekBar ?记不太清),如果你再AndroidManifest文件的application中将主题设置为无导航栏的主题(NoActionBar或者自己定义的无导航栏主题)的话,编译会报错 :
Process: net.zhineng.liumanager, PID: 26836
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.zhineng.liumanager/net.zhineng.liumanager.MainActivity}: java.lang.IllegalStateException: Activity 包名.MainActivity@c355c7d does not have an ActionBar set via setSupportActionBar()
解决办法:使用系统自带的DarkActionBar主题 ,再使用代码隐藏,缺点是每个activity中都要写隐藏代码
//kotlin
supportActionBar!!.hide()
//java
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
【Android】does not have an ActionBar set via setSupportActionBar()-CSDN博客
坑点3.findNavController方法报错:
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.zhineng.liumanager/net.zhineng.liumanager.MainActivity}: java.lang.IllegalStateException: Activity 你的包名.MainActivity@22742e6 does not have a NavController set on 2131231061
解决办法:添加initNavController方法的代码
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
supportActionBar!!.hide()
val navView: BottomNavigationView = binding.navView
val navController = findNavController(R.id.nav_host_fragment_activity_main)
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
fun initNavController() {
//获取mFragments成员变量
val mFragmentsField = FragmentActivity::class.java.getDeclaredField("mFragments").apply {
isAccessible = true
}
//获取mCreated成员变量
val mCreatedField = FragmentActivity::class.java.getDeclaredField("mCreated").apply {
isAccessible = true
}
//获取dispatchActivityCreated方法
val dispatchActivityCreatedMethod =
FragmentController::class.java.getDeclaredMethod("dispatchActivityCreated").apply {
isAccessible = true
}
//调用dispatchActivityCreated方法
dispatchActivityCreatedMethod.invoke(mFragmentsField.get(this))
//别忘了把mCreated设置为true,防止dispatchActivityCreated在onStart中再次调用
mCreatedField.set(this, true)
}
}
Android Navigation 报错does not have a NavController set on xxxxx 解决方案-CSDN博客
坑点4:webView加载写死的Url时加载不出网址
原因:
webView不允许加载显示的url,既http://这样的链接
没有申明网络权限
解决方法
关于第一条的 ,条件允许可以直接将http改为https 看能不能加载,不行的话就使用我找到的别的大佬的方法试试:
【已解决】Android WebView net::ERR_CLEARTEXT_NOT_PERMITTED_android webview 域名异常-CSDN博客 第二条:网络权限在AndroidManifest文件中静态申请一下就行
<uses-permission android:name="android.permission.INTERNET" />
坑点5: 编译报错: Execution failed for task ':app:checkDebugDuplicateClasses'.
解决方法:
项目的gradle.properties文件中添加一行代码:
android.enableJetifier = true
好了上面就是我做这个项目碰到的所有问题了,代码这个东西确实是一点点都不能错,dk、gradle 版本以及jdk的版本都要相互对应 ,一个高了或者低了都会导致出问题,项目里面配置的信息也要保证兼容,一招不慎就是全屏标红,这简直是我这种小白的恶梦,这时候就要感谢发布攻略,教程的各位大佬们了,每次碰到的问题一般都有前辈踩坑解决了,感谢各位大佬!所以我也会来总结一下,一方面可以以后自己碰到了回来抄代码,另一方面也希望我的这些经验可以帮助到后来者,不骄不躁,我们共同成长吧!!!