安卓 eclipse 项目 迁移 android studio gradle 配置 热修复 annotations注解
Posted 当富网络
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓 eclipse 项目 迁移 android studio gradle 配置 热修复 annotations注解相关的知识,希望对你有一定的参考价值。
repositories
mavenCentral()
mavenLocal()
jcenter()
buildscript
repositories
mavenCentral()
mavenLocal()
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:2.1.0'
// annotations 注解
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
// tinker 热修复
classpath "com.tencent.tinker:tinker-patch-gradle-plugin:$TINKER_VERSION"
apply plugin: 'android'
// tinker热修复
apply plugin: 'com.tencent.tinker.patch'
//Android annotations
apply plugin: 'android-apt'
def AAVersion = '3.3.1'
dependencies
compile fileTree(dir: 'libs', include: '*.jar')
compile("com.tencent.tinker:tinker-android-lib:$TINKER_VERSION") changing = true
compile("com.tencent.tinker:tinker-android-anno:$TINKER_VERSION") changing = true
compile "com.android.support:multidex:1.0.1"
//Android annotations编译jar包路径
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
def gitSha()
try
String gitRev = 'git rev-parse --short HEAD'.execute().text.trim()
if (gitRev == null)
throw new GradleException("can't get git rev, you should add git to system path or just input test value, such as 'testTinkerId'")
return gitRev
catch (Exception e)
throw new GradleException("can't get git rev, you should add git to system path or just input test value, such as 'testTinkerId'")
def javaVersion = JavaVersion.VERSION_1_7
android
compileSdkVersion 19
buildToolsVersion "23.0.2"
compileOptions
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
//recommend
dexOptions
jumboMode = true
//最大堆处理
incremental = true;
preDexLibraries = false
javaMaxHeapSize "4g" // 2g should be also OK
lintOptions
disable "ResourceType"
checkReleaseBuilds false
abortOnError false
packagingOptions
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
sourceSets
main
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
// 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')
signingConfigs
release
try
storeFile file("./keystore/release.keystore")
storePassword "abc!@#\\$410"
keyAlias "xxx"
keyPassword "abc!@#\\$410"
catch (ex)
throw new InvalidUserDataException(ex.toString())
debug
//storeFile file("./keystore/debug.keystore")
try
storeFile file("./keystore/debug.keystore")
storePassword "abc!@#\\$410<span style="font-family: Arial, Helvetica, sans-serif;">xx\\$xx</span>"
keyAlias "xxx"
keyPassword "xx\\$xx"
catch (ex)
throw new InvalidUserDataException(ex.toString())
defaultConfig
applicationId "com.pggmall.chatuidemo"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "2.0.0"
/**
* you can use multiDex and install it in your ApplicationLifeCycle implement
*/
multiDexEnabled true
/**
* not like proguard, multiDexKeepProguard is not a list, so we can't just
* add for you in our task. you can copy tinker keep rules at
* build/intermediates/tinker_intermediates/tinker_multidexkeep.pro
*/
multiDexKeepProguard file("keep_in_main_dex.txt")
/**
* buildConfig can change during patch!
* we can use the newly value when patch
*/
buildConfigField "String", "MESSAGE", "\\"I am the base apk\\""
// buildConfigField "String", "MESSAGE", "\\"I am the patch apk\\""
/**
* client version would update with patch
* so we can get the newly git version easily!
*/
buildConfigField "String", "CLIENTVERSION", "\\"$gitSha()\\""
buildConfigField "String", "PLATFORM", "\\"all\\""
// //use to test flavors support
// productFlavors
// flavor1
// applicationId 'tinker.sample.android.flavor1'
//
//
// flavor2
// applicationId 'tinker.sample.android.flavor2'
//
//
buildTypes
release
minifyEnabled false
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debug
debuggable true
minifyEnabled false
signingConfig signingConfigs.debug
def bakPath = file("$buildDir/bakApk/")
/**
* you can use assembleRelease to build you base apk
* use tinkerPatchRelease -POLD_APK= -PAPPLY_MAPPING= -PAPPLY_RESOURCE= to build patch
* add apk from the build/bakApk
*/
ext
//for some reason, you may want to ignore tinkerBuild, such as instant run debug build?
tinkerEnabled = true
//you should bak the following files
//old apk file to build patch apk
tinkerOldApkPath = "$bakPath/pggmall_native-debug-1017-10-38-09.apk"
//proguard mapping file to build patch apk
tinkerApplyMappingPath = "$bakPath/"
//resource R.txt to build patch apk, must input if there is resource changed
tinkerApplyResourcePath = "$bakPath/pggmall_native-debug-1017-10-38-09-R.txt"
def getOldApkPath()
return hasProperty("OLD_APK") ? OLD_APK : ext.tinkerOldApkPath
def getApplyMappingPath()
return hasProperty("APPLY_MAPPING") ? APPLY_MAPPING : ext.tinkerApplyMappingPath
def getApplyResourceMappingPath()
return hasProperty("APPLY_RESOURCE") ? APPLY_RESOURCE : ext.tinkerApplyResourcePath
def getTinkerIdValue()
//return hasProperty("TINKER_ID") ? TINKER_ID : gitSha()
return "tinkerId"
def buildWithTinker()
return hasProperty("TINKER_ENABLE") ? TINKER_ENABLE : ext.tinkerEnabled
if (buildWithTinker())
apply plugin: 'com.tencent.tinker.patch'
tinkerPatch
/**
* necessary,default 'null'
* the old apk path, use to diff with the new apk to build
* add apk from the build/bakApk
*/
oldApk = getOldApkPath()
/**
* optional,default 'false'
* there are some cases we may get some warnings
* if ignoreWarning is true, we would just assert the patch process
* case 1: minSdkVersion is below 14, but you are using dexMode with raw.
* it must be crash when load.
* case 2: newly added Android Component in AndroidManifest.xml,
* it must be crash when load.
* case 3: loader classes in dex.loader are not keep in the main dex,
* it must be let tinker not work.
* case 4: loader classes in dex.loader changes,
* loader classes is ues to load patch dex. it is useless to change them.
* it won't crash, but these changes can't effect. you may ignore it
* case 5: resources.arsc has changed, but we don't use applyResourceMapping to build
*/
ignoreWarning = true
/**
* optional,default 'true'
* whether sign the patch file
* if not, you must do yourself. otherwise it can't check success during the patch loading
* we will use the sign config with your build type
*/
useSign = true
/**
* Warning, applyMapping will affect the normal android build!
*/
buildConfig
/**
* optional,default 'null'
* if we use tinkerPatch to build the patch apk, you'd better to apply the old
* apk mapping file if minifyEnabled is enable!
* Warning:
* you must be careful that it will affect the normal assemble build!
*/
applyMapping = getApplyMappingPath()
/**
* optional,default 'null'
* It is nice to keep the resource id from R.txt file to reduce java changes
*/
applyResourceMapping = getApplyResourceMappingPath()
/**
* necessary,default 'null'
* because we don't want to check the base apk with md5 in the runtime(it is slow)
* tinkerId is use to identify the unique base apk when the patch is tried to apply.
* we can use git rev, svn rev or simply versionCode.
* we will gen the tinkerId in your manifest automatic
*/
tinkerId = getTinkerIdValue()
dex
/**
* optional,default 'jar'
* only can be 'raw' or 'jar'. for raw, we would keep its original format
* for jar, we would repack dexes with zip format.
* if you want to support below 14, you must use jar
* or you want to save rom or check quicker, you can use raw mode also
*/
dexMode = "jar"
/**
* necessary,default '[]'
* what dexes in apk are expected to deal with tinkerPatch
* it support * or ? pattern.
*/
pattern = ["classes*.dex",
"assets/secondary-dex-?.jar"]
/**
* necessary,default '[]'
* Warning, it is very very important, loader classes can't change with patch.
* thus, they will be removed from patch dexes.
* you must put the following class into main dex.
* Simply, you should add your own application @code tinker.sample.android.SampleApplication
* own tinkerLoader, and the classes you use in them
*
*/
loader = ["com.tencent.tinker.loader.*",
"com.pggmall.chatuidemo.MyApplication",
//use sample, let BaseBuildInfo unchangeable with tinker
"com.tinker.app.BaseBuildInfo"
]
lib
/**
* optional,default '[]'
* what library in apk are expected to deal with tinkerPatch
* it support * or ? pattern.
* for library in assets, we would just recover them in the patch directory
* you can get them in TinkerLoadResult with Tinker
*/
pattern = ["lib/armeabi/*.so"]
res
/**
* optional,default '[]'
* what resource in apk are expected to deal with tinkerPatch
* it support * or ? pattern.
* you must include all your resources in apk here,
* otherwise, they won't repack in the new apk resources.
*/
pattern = ["res/*", "assets/*", "resources.arsc", "AndroidManifest.xml"]
/**
* optional,default '[]'
* the resource file exclude patterns, ignore add, delete or modify resource change
* it support * or ? pattern.
* Warning, we can only use for files no relative with resources.arsc
*/
ignoreChange = ["assets/sample_meta.txt"]
/**
* default 100kb
* for modify resource, if it is larger than 'largeModSize'
* we would like to use bsdiff algorithm to reduce patch file size
*/
largeModSize = 100
packageConfig
/**
* optional,default 'TINKER_ID, TINKER_ID_VALUE' 'NEW_TINKER_ID, NEW_TINKER_ID_VALUE'
* package meta file gen. path is assets/package_meta.txt in patch file
* you can use securityCheck.getPackageProperties() in your ownPackageCheck method
* or TinkerLoadResult.getPackageConfigByName
* we will get the TINKER_ID from the old apk manifest for you automatic,
* other config files (such as patchMessage below)is not necessary
*/
configField("patchMessage", "tinker is sample to use")
/**
* just a sample case, you can use such as sdkVersion, brand, channel...
* you can parse it in the SamplePatchListener.
* Then you can use patch conditional!
*/
configField("platform", "all")
//or you can add config filed outside, or get meta value from old apk
//project.tinkerPatch.packageConfig.configField("test1", project.tinkerPatch.packageConfig.getMetaDataFromOldApk("Test"))
//project.tinkerPatch.packageConfig.configField("test2", "sample")
/**
* if you don't use zipArtifact or path, we just use 7za to try
*/
sevenZip
/**
* optional,default '7za'
* the 7zip artifact path, it will use the right 7za with your platform
*/
zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
/**
* optional,default '7za'
* you can specify the 7za path yourself, it will overwrite the zipArtifact value
*/
// path = "/usr/local/bin/7za"
/**
* bak apk and mapping
*/
android.applicationVariants.all variant ->
/**
* task type, you want to bak
*/
def taskName = variant.name
tasks.all
if ("assemble$taskName.capitalize()".equalsIgnoreCase(it.name))
it.doLast
copy
def date = new Date().format("MMdd-HH-mm-ss")
from "$buildDir/outputs/apk/$project.getName()-$taskName.apk"
into bakPath
rename String fileName ->
fileName.replace("$project.getName()-$taskName.apk", "$project.getName()-$taskName-$date.apk")
from "$buildDir/outputs/mapping/$taskName/mapping.txt"
into bakPath
rename String fileName ->
fileName.replace("mapping.txt", "$project.getName()-$taskName-$date-mapping.txt")
from "$buildDir/intermediates/symbols/$taskName/R.txt"
into bakPath
rename String fileName ->
fileName.replace("R.txt", "$project.getName()-$taskName-$date-R.txt")
以上是关于安卓 eclipse 项目 迁移 android studio gradle 配置 热修复 annotations注解的主要内容,如果未能解决你的问题,请参考以下文章
从 Eclipse 导入项目到 Android Studio
将使用 NDK 和 Gstreamer 的 Eclipse android 项目迁移到 Android Studio
eclipse项目迁移到android studio(图文最新版)