赞
踩
迁移步骤
1、 eclipse导出gradle项目。
File->Export->Generate Gradle build files然后一直下一步,选择你要导出的项目(不用管依赖项目,会自动导出的),如图:
2、 AS或者IDEA导入gradle项目 ,注意:
dependencies { classpath 'com.android.tools.build:gradle:3.0.1' }
版本,决定
buildToolsVersion的版本,需要依赖libs下jar包的情况下,使用如下:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }
如果本项目是可以执行的apk项目,那么注意build里面写上:
apply plugin: 'com.android.application'
如果是作为第三方库使用的话添加如下一句:
apply plugin: 'com.android.library'
我涉及到的一个library完整的从eclipse导出 的build.gradle文件如下:
buildscript { repositories { jcenter() google() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' } } apply plugin: 'com.android.library' dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) } android { compileSdkVersion 18 buildToolsVersion "26.0.2" sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } } 3、导入完成后,根据gradle版本,build project即可,在bulid对应的目录下:
生成可以被外界依赖的aar文件,注意
jniLibs.srcDirs = ['libs']也很关键,打包so文件时用的到,如果你的library项目里面的AndroidManifest.xml中有main入口
<!--<intent-filter>--> <!--<action android:name="android.intent.action.MAIN" />--> <!--<category android:name="android.intent.category.LAUNCHER" />--> <!--</intent-filter> 切记一定要注释掉,否则作为第三方依赖使用后,打包安装到手机上会出现两个图标。(亲身惨痛经历)
再有就是最关键的报so文件的路径错误
08-27 19:52:50.892 7108-7218/com.alipay.mobile.android.veirfy.demo W/System.err: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.alipay.mobile.android.veirfy.demo-HbYA70kt_gPprmJzqz3riA==/base.apk"],nativeLibraryDirectories=[/data/app/com.alipay.mobile.android.veirfy.demo-HbYA70kt_gPprmJzqz3riA==/lib/arm, /data/app/com.alipay.mobile.android.veirfy.demo-HbYA70kt_gPprmJzqz3riA==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib, /system/vendor/lib/hw]]] couldn't find "libdeviceid_1.0.so"
08-27 19:52:50.893 7108-7218/com.alipay.mobile.android.veirfy.demo W/System.err: at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
08-27 19:52:50.893 7108-7218/com.alipay.mobile.android.veirfy.demo W/System.err: at java.lang.System.loadLibrary(System.java:1657)
08-27 19:52:50.893 7108-7218/com.alipay.mobile.android.veirfy.demo W/System.err: at com.alipay.deviceid.module.senative.DeviceIdUtil.<clinit>(DeviceIdUtil.java:28)
08-27 19:52:50.893 7108-7218/com.alipay.mobile.android.veirfy.demo W/System.err: at com.alipay.deviceid.module.senative.DeviceIdUtil.getInstance(Unknown Source:0)
08-27 19:52:50.893 7108-7218/com.alipay.mobile.android.veirfy.demo W/System.err: at com.alipay.deviceid.DeviceTokenClient$1.run(DeviceTokenClient.java:54)
08-27 19:52:50.893 7108-7218/com.alipay.mobile.android.veirfy.demo W/System.err: at java.lang.Thread.run(Thread.java:764)
造成的闪退,
解决可参考如下:在build.gradle中使用
ndk { abiFilters 'armeabi-v7a','armeabi' //解決闪退的关键 }减少不必要的匹配,这样写也会大大缩减包的体积,同时兼容大部分机型。
另我的项目一旦使用混淆就闪退,
minifyEnabled false // true 是运行混淆文件 ,false 是不运行混淆文件。
不知什么原因,索性就不混淆了,以上是项目实战中踩到的坑,在此做个笔记,一点心得仅供参考,各位大牛多多指教!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。