(原创)开发使用Android studio所遇到的一些问题总结
1.Android studio下载链接地址(无需FQ):包括先行版和正式版(推荐使用正式版bug少)
http://www.androiddevtools.cn/
2.第一次安装避免成功先不要急着打开应用,先取消打开。到安装文件夹下/bin/idea.properties文件打开在最后面加入
disable.android.first.run=true 并后面多一行回车就可以。再又一次打开AS就可以避免第一次去联网请求更新
3.导入eclipse项目:比如本人须要导入D:\workspace\eclipse\test一个test项目方式
选择须要导入的项目:(要是有依赖jar也是直接选中导入主项目就可以)。点击OK进入下一步
选择存放的project项目文件夹位置:
下一步:默认就可以
finish就可以完毕导入,是不是so easy!
导入成功后:须要类似eclipse视图方式须要切换
选择project就可以
看到手机图标么有,这就说明你项目能够正常执行了
以下解说下关于gradle编译相关出错地方和怎么选择你自己本地的gradle编译版本号
首先:普通情况下都要将gradle设置为离线不去更新。这可能涉及到须要FQ去寻找就会导致项目卡住在那里一直编译;改动例如以下设置
1.点击扳手图标---setting
搜索gradle按例如以下设置
怎样选择本地gradle:上面图的第一个红圈选项既是选择本地gradle点击后面的...弹出框选择AS安装文件夹下/gradle对应版本号就可以如图
2.关于导入别人项目导致本地的gradle与其不一致无法编译通过(也就是编译报错问题)解决
首先:须要改动编译gradle下的压缩包路径。查看本地版本号方式:D:\Program\android-studio\gradle
3.关于项目总体gradle编译工具版本号改动,查看方式:D:\Program\android-studio\gradle\m2repository\com\android\tools\build\gradle
相应项目中的版本号:注意是最外层gradle
4.对于单个项目或者jar依赖包的节点下的各个gradle创建工具版本,查看方式:
基本改动完这些项目都是能够正常执行了!!
!
下面为开发过程的其它AS报错的整理:
1.出现非法字符:将全部报错的文件找到该文件将其格式设置为UTF-8无BOM
如:
D:\workspace\studiojob\DadaDriver\dadaDriver\src\main\java\com\newdadadriver\utils\ChannelUtil.java
Error:(1, 1) 错误: 非法字符: \65279
Error:(1, 10) 错误: 须要class, interface或enum
2.Project Sync
The project 'DadaDriver' is not a Gradle-based project
More Information about migrating to Gradle
gradle源文件缺失问题;又一次importproject就可以
3.AssertionError: platform-tools doesn't match platform-tools-preview
编译问题;刷新就可以
4.最低版本号报错:更改更高版本号号
Error:(5, 5) uses-sdk:minSdkVersion 5 cannot be smaller than version 8 declared in library
D:\workspace\studiojob\DadaDriver\slidingMenu_library\build\intermediates\exploded-aar\DadaDriver\androidSupportLib\unspecified\AndroidManifest.xml
5.执行项目出现:按提示加入对应的代码到build.gradle的Android下就可以
Error:duplicate files during packaging of APK D:\workspace\studiojob\DadaDriver\dadaDriver\build\outputs\apk\dadaDriver-debug-unaligned.apk
Path in archive: META-INF/LICENSE.txt
Origin 1: D:\workspace\studiojob\DadaDriver\dadaDriver\libs\httpmime-4.2.4.jar
Origin 2: D:\workspace\studiojob\DadaDriver\dadaDriver\libs\fastjson.jar
You can ignore those files in your build.gradle:
android {
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
6.模拟器出现空白。无法正常显示。原因:没有相应能够显示布局版本号。调低就可以org.jetbrains.android.uipreview.RenderingException:Failed to load the LayoutLib: com/android/layoutlib/bridge/Bridge : Unsupportedmajor.minor version 52.0
at org.jetbrains.android.uipreview.LayoutLibraryLoader.load(LayoutLibraryLoader.java:90)
atorg.jetbrains.android.sdk.AndroidTargetData.getLayoutLibrary(AndroidTargetData.java:180)
atcom.android.tools.idea.rendering.RenderService.createTask(RenderService.java:164)
以上是本人临时遇到整理的问题。兴许有发现其它还会加入。
7. Apk的签名混淆打包
7-1. 创建签名文件keystore
7-2. 签名apk
能够代码直接在build.gradle里面编写
android { signingConfigs {// 签名 config { keyAlias 'test' keyPassword '123456' storeFile file('H:/zhou/keystore.jks') storePassword '123456' } } compileSdkVersion 24 buildToolsVersion "24.0.1" defaultConfig { applicationId "com.vsoontech.p2p.sample" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } //运行lint检查,有不论什么的错误或者警告提示。都会终止构建 lintOptions { abortOnError false } buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true // 混淆 zipAlignEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.config // 使用签名 } } productFlavors { } }
7-2. 混淆
# 指定代码的压缩级别 -optimizationpasses 5 # 包名不混合大写和小写 -dontusemixedcaseclassnames # 不去忽略非公共的库类 -dontskipnonpubliclibraryclasses # 优化 不优化输入的类文件 -dontoptimize # 预校验 -dontpreverify # 混淆时是否记录日志 -verbose # 混淆时所採用的算法 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 保护注解 -keepattributes *Annotation* # 保持哪些类不被混淆 -keep class com.vsoontech.p2p.** {*;} -keep class com.linkin.base.** {*;} # 假设有引用v4包能够加入以下这行 -keep public class * extends android.support.v4.app.Fragment # 忽略警告 -ignorewarning # 假设引用了v4或者v7包 -dontwarn android.support.** # 保持 native 方法不被混淆 -keepclasseswithmembernames class * { native <methods>; } # 保持自己定义控件类不被混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } # 保持 Parcelable 不被混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } # 保持枚举 enum 类不被混淆 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }