安卓编译命令行
1. Android编译源码时出现的:<命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义 [-Werror]
估计刚升完11.10的朋友,编android都会遇到这个问题吧,我是把frameworks/base/tools/obbtool/Android.mk 中两处带有Werror编译选项的地方都注释掉了,还好暂时解决了,不过楼上的方法感觉更好啊。
2. android studio工程使用命令直接编译
在根目录中,使用命令
chmod 777 gradlew
./gradlew assembleRelease
即可。
生成的apk在app/build/outputs/apk/release/目录下
3. android开发,怎么使用ndk编译成.so文件
一、首先下载android-ndk,官方网站是:http://developer.android.com/tools/sdk/ndk/index.html
目前最新的版本是android-ndk-r8e-windows-x86.zip,下载地址:
http://dl.google.com/android/ndk/android-ndk-r8e-windows-x86.zip
下载后把压缩包解压出来,例如:D:\ndk,目录下的ndk-build.cmd就是用来编译的批处理命令。
二、编译,打开cmd命令行窗口,cd进入目录:D:\ndk\samples\hello-jni,
然后执行命令:D:\ndk\ndk-build.cmd(如果设置过环境变量则直接使用ndk-build.cmd)来编译hello-jni,如果没有错误会输出:
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
"Compile thumb : hello-jni <= hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => libs/armeabi/libhello-jni.so
三、创建android应用程序并使用so文件
打开eclipse创建一个android应用程序HelloJni,默认的com.example.hellojni包下面有一个MainActivity.java,
在此包下添加一个HelloJni.java,
4. 如何在命令行下使用Android NDK交叉编译工具
1. 定义相关的目录(请修改为自己的相关目录)
$ export NDKROOT=/opt/android/android-ndk-r10
$ export SYSROOT=$NDKROOT/platforms/android-19/arch-arm
$ export GCC=$NDKROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
2. 编译代码
$ $GCC -o main.out main.c --sysroot=$SYSROOT
3. 执行程序
$ adb push main.out /data/local/
$ adb shell
$ /data/local/main.out
其核心思想其实很简单, 就是使用NDK提供的arm-linux-androideabi-gcc代替Linux下的gcc工具, 使用NDK提供的C头文件/库文件目录代替 Linux 下默认的目录, 其实, 使用gcc编译的时候默认的 sysroot设置为了本机的"/"目录, 等价于如下命令 :
$ gcc -o main.out main.c --sysroot=/
关于如何在命令行下使用Android NDK交叉编译工具就介绍到这里了,希望对大家有所帮助
5. android编译命令的说明
android源码目录下的build/envsetup.sh文件,描述编译的命令
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.
要想使用这些命令,首先需要设置android脚本编译环境,在源码根目录执行 source build/envsetup.sh
m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有Android.mk文件
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件
下面举个例子说明,假设我要编译android下的\framework\av\cmds\screenrecord模块,
当前目录为源码根目录,方法如下:
1、source build/envsetup.sh
2、mmm framework/av/cmds/screenrecord
或者 :
1、source build/envsetup.sh
2、cd framework/av/cmds/screenrecord
3、mm
6. android 怎样编译kernel 命令 make
方法如下:
在Linux的环境下:
建立目录:
mkdir ~/android-kernel cd android-kernel
下载源代码, 大概有280MB, 慢慢等哈~~~ (当然你要先安装git) git clone git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git
类似的屏幕信息:
Initialized empty Git repository in /home/user/android-kernel/kernel/.git/ remote: Counting objects: 908251, done.
remote: Compressing objects: 100% (153970/153970), done.
remote: Total 908251 (delta 755115), reused 906063 (delta 753016) Receiving objects: 100% (908251/908251), 281.86 MiB | 292 KiB/s, done. Resolving deltas: 100% (755115/755115), done. Checking out files: 100% (22584/22584), done.
然后去到htc-msm branch: cd kernel
git checkout -b htc-msm origin/htc-msm
屏幕信息:
Branch htc-msm set up to track remote branch refs/remotes/origin/htc-msm. Switched to a new branch "htc-msm"
下载ARM的toolchain, 大概64MB左右, 下到~/android-kernel: 下
载
:
http://www.codesourcery.com/gnu_toolchains/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
cd ~/android-kernel
tar xjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
编译kernel
准备缺省的Kaiser 配置文件.config
cd ~/android-kernel/kernel
make htckaiser_defconfig ARCH=arm
然后编译zImage:
export PATH=~/android-kernel/arm-2008q1/bin:$PATH
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
编译好的在: ~/android-kernel/kernel/arch/arm/boot/zImage
如果你的机器是多核的, 可以编译的时候用-j <cores/cpus_number>来加速:
比如, 双核的可以:
make -j 2 zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi
满意请采纳谢谢
7. Android系统编译命令make
在编译Android系统时,需要先执行2条命令,来设置必要的环境变量。
接下来就可以执行make系列命令,来完成不同的需要。
make clean 用来清除编译历史,开始一个全新的编译。
make -j 或 make -j8 启动编译过程。 -j 后面的数字代表要使用的cpu thread的数目。
在完成了全编译后,才能执行生成OTA升级包的操作。
注意事项:
8. 如何反编译android应用以及重编译,签名和对齐优化
首先,了解一下我们为什么需要反编译apk
大部分情况下,是由于想本地化一款优秀的应用,才需要做这事儿;又或者进行少量的smali修改以达到想要的效果(如添加归属地,使3G版Nexus 7支持Wi-Fi热点)。
下面我们先准备运行环境和工具
建立工作目录,如.\workspace\apktoolbox (下面同样以此路径为例)
必不可少的JDK:Oracle Java下载,安装完成后把<jdk-inst-path>\bin添加到$PATH环境变量中
反编译和重编译工具apktool:Google Code下载,按平台下载(一个apktool-install-<platform>-<ver>-tar.bz2,一个apktool<ver>.tar.bz2,下载完成后解压至.\workspace\apktoolbox\bin
密钥文件,共4组。test/shared/media/platform,从android source中获取,分别对应不同共享用户ID时签名所需(查看应用AndroidManifest.xml第二行android:sharedUserId项 ),放到.\workspace\apktoolbox\bin下
test - 无android:sharedUserId项
shared - android:sharedUserId=android.uid.shared
media - android:sharedUserId=android.uid.media
platform - android:sharedUserId=android.uid.system
签名工具signapk.jar,放到.\workspace\apktoolbox\bin下
对齐优化工具zipalign(从android sdk中获取,在tools目录下),放到.\workspace\apktoolbox\bin下
准备工作完成
接下来我们就要开始工作了(以本地化工作为例)
把待反编译的apk放到.\workspace\apktoolbox\apks下
在命令行模式下进入.\workspace\apktoolbox\bin目录,输入以下命令进行解包(反编译)
apktool d ..\apks\<apkfile>.apk ..\apks\<outdir>
.\workspace\apktoolbox\apks\<outdir>\res下的values目录(英文原版)和values-r<locale>目录(本地化)就是我们需要的对象。
本地化工作完成后,在命令行中输入以下命令进行重新打包(重新编译)
apktool b ..\apks\<outdir>
.\workspace\apktoolbox\apks\<outdir>\dist目录下会生成重新打包后的apk(未签名,未对齐优化)
重新打包完成后,在命令行中输入以下命令进行签名(根据实际情况选用密钥,这里以test密钥为例)
java -jar signapk.jar testkey.x509.pem testkey.pk8 ..\apks\<outdir>\dist\<apkfile>.apk ..\apks\<apkfile>_signed.apk
签名完成后,在命令行中输入以下命令进行对齐优化
zipalign -f -v 4 ..\apks\<apkfile>_signed.apk ..\apks\<apkfile>_zipaligned.apk
<apkfile>_zipaligned.apk就是我们最终需要的apk了。
完成
部分apk需要系统框架资源,没有的话在重新打包时会报错,这种情况下我们只需要先安装一下对应系统框架即可(从你目标ROM中把/system/framework/framework-res.apk提取出,放到.\workspace\apktoolbox\apks下)。在命令行中输入以下命令进行安装
apktool if ..\apks\framework-res.apk
9. 求教一个问题,命令行编译Android程序,如何用proguard混淆
针对android 选择user版本进行编译的时候,会出现proguard错误,我们需要知道的事情
1.proguard是做什么的,他的作用是将java代码进行混淆的工具
2.因为proguard是混淆工具,所以android的mk文件也对其支持为两种方式:
1.指定不需要混淆的native方法与变量的proguard.flags文件如:LOCAL_PROGUARD_FLAG_FILES := proguard.flags
2.制定编译的工程,不要使用代码混淆的工具进行代码混淆如:LOCAL_PROGUARD_ENABLED := disabled
3.不设置,默认使用LOCAL_PROGUARD_ENABLED := full.即将该工程代码全部混淆
10. 用java或C#调用命令行对android工程进行编译、打包和签名,急求!!
Android本身是支持ant打包项目的,并且SDK中自带一个build.xml文件。
通过该文件,可以对文件进行编译、打包、安装等。并且支持多种方式打包,如debug或者release。
一般的,可以按照如下方法进行操作:
首先创建一个Android工程。
工程创建好后,需要为工程添加ant支持,即创建相应的build.xml文件。
这个文件不需要用户自己创建,只需要执行如下命令即可:
<sdk>/tools/android update project -p <project> -t <target>
其中:
sdk为sdk的安装目录,其下的tools/android是我们要使用的命令。
project为项目目录。
target为项目所使用的android的target id,也就是项目对应的android的版本。
可以将sdk的tools目录添加到环境变量 ~/.bashrc 文件中,重启后生效,以后可以直接使用命令了。
可以通过执行以下命令查看当前sdk中所包含的target以及相应id:
android list targets
执行完android update project命令后,会在项目的根目录下生成相应的ant文件。
主要有build.xml、ant.properties、local.properties三个文件。
如果没有ant.properties文件,可以自己手动添加。
其中,build.xml文件是进行ant build的主要文件,它引用了其它的文件。
在local.properties文件中定义了sdk.dir属性,也就是当前使用的sdk的目录。
在ant.properties文件中,可以定义自己的一些属性,或者重定义一些属性。
当然,这两个属性文件可有可无,直接定义到build.xml中也没有关系。
在build.xml中的最后,引用了sdk目录下的tools/ant/build.xml文件。
这个是sdk默认的build文件,可以将其内容直接拷贝过来,也可以保持当前的引用方式。
项目下的build.xml默认执行的target是help,运行后可以看到相关的帮助信息。
通过帮助信息,可以看到其它可用的target。
一般的,我们需要修改为debug或者release。
修改好之后,再运行build.xml文件,就会执行我们需要的编译过程了。
build.xml文件的执行方法为:右键->Run As->Ant Build。
如果是debug版的话,默认会使用debug方式签名。
如果是release版的话,需要指定相应的keystore以及私钥。
否则,最后只能生成一个没有签名的apk文件。
设定私钥库的方法是,在ant.properties文件中,添加如下内容:
key.store=<keystore>
key.alias=<key>
key.store.password=<keystore pwd>
key.alias.password=<key pwd>
其中:
keystore为私钥库文件。
key为签名需要使用的私钥。
key.store.password为私钥库的密码。
key.alias.password为私钥的密码。
两个密码相关的属性也可以不添加,而只添加私钥库及私钥。
这样的话,执行时会依次弹出相应的输入框,提示用户输入相应的密码。
这样虽然相对繁琐,但是由于没有明文指定密码,对私钥库的保护会更好一些。
如果项目引用了第三方库的话,只需要在项目根目录创建libs文件夹并将其放入即可。
如果是jar库,直接放到libs目录下;如果是so库,需要放到libs的名为armeabi的子目录下。
也可以通过设定相应的属性来指定第三方库的位置,其默认都是libs文件夹。
jar.libs.dir为jar类型库所在的目录。
native.libs.absolute.dir为so类型库所在的目录,即armeabi的父目录。
如果项目包含了jni代码,希望在打包时自动重新编译so库,可以修改build.xml文件。
修改方法为,在引用sdk的build.xml文件之前添加如下target:
<target name="-pre-build" depends="-ndk-build">
</target>
<target name="-ndk-build">
<exec executable="ndk-build" failonerror="true">
<arg value="clean" />
</exec>
<exec executable="ndk-build" failonerror="true" />
</target>
ndk-build为ndk提供的命令,需要将ndk安装目录添加到环境变量中,添加方法同sdk/tools。
生成的so默认会放到libs/armeabi目录下。
使用默认的build.xml打包apk时,已经包含了混淆、签名、对齐优化等相关过程。
如果是使用release的方式,最后生成的apk文件已经可以直接发布了。
