Related
In the next update on the recovery console, would it be possible to add a script that when you type /? like in old dos commands, that you will get a list of bash commands? Or does such an animal already exist.
I have a copy of about 5 sheets of paper listing all linux bash commands (similar to dos but without all the syntax).
While updating one day, I messed up and started from that point on trying to learn the linux commands that copy files, rename files, remount /sdcard and so on. Its fairly simple, but it would be nice to do for example remount/? and give you the proper usage of remount and so on. I know most of you all are not DOS fans, but I need a ground zero to start from if i wanna learn the way this runs, without carrying around a stack of papers with me .
--help works eg. ls --help
dont have a g1 yet so cant try it out, but what if you try remount --help or maybe its just one -
i will try that
I didn't see it in the list.
i dont think that wud the greatest thing becuz wat if ur typing a message anything you type in can damage your phone
kay11224 said:
i dont think that wud the greatest thing becuz wat if ur typing a message anything you type in can damage your phone
Click to expand...
Click to collapse
Huh? Wah?
Well I tried --help
This only helps if you happen to know the bash command. It is a step in the right direction.
What I am referring to is a list of /? help files.
It is a list of commands to include such commands as ls, cp, rm, remount, cd .. and so on. The reason why I say it is because with a small description of the bash commands people that have a working knowledge of computers, but not neccessarily of linux would be able to use it.
I know eventually I will probably remember the commands or at least the ones most important to me. I only ask because it took me about 1.5 hours to figure out a simple delete filename X.zip (rm update.zip), Copy filename X.zip to /sdcard (cp blahblah.zip /sdcard), mv blahblah.zip update.zip.
It took me using another computer to figure out those simple commands. I know it seems like I am asking something very redundant and simple, but I don't understand why linux command line doesn't have a help list of terms.
It wasn't until I read these bash commands that it dawned on me that recovery.sh was the recovery script to be executed from the command line. I couldn't have used it anyways, because by then I had already messed that up too.
Suffice to say I got my phone up and running and I am feeling a little proud of figuring it out on my own.
Brutal-Force said:
This only helps if you happen to know the bash command. It is a step in the right direction.
What I am referring to is a list of /? help files.
It is a list of commands to include such commands as ls, cp, rm, remount, cd .. and so on. The reason why I say it is because with a small description of the bash commands people that have a working knowledge of computers, but not neccessarily of linux would be able to use it.
I know eventually I will probably remember the commands or at least the ones most important to me. I only ask because it took me about 1.5 hours to figure out a simple delete filename X.zip (rm update.zip), Copy filename X.zip to /sdcard (cp blahblah.zip /sdcard), mv blahblah.zip update.zip.
It took me using another computer to figure out those simple commands. I know it seems like I am asking something very redundant and simple, but I don't understand why linux command line doesn't have a help list of terms.
It wasn't until I read these bash commands that it dawned on me that recovery.sh was the recovery script to be executed from the command line. I couldn't have used it anyways, because by then I had already messed that up too.
Suffice to say I got my phone up and running and I am feeling a little proud of figuring it out on my own.
Click to expand...
Click to collapse
"bash comes with help for all built-in commands. To see a list of all built-in commands, type help. To obtain help on a specific command, type help command, where command is the command you need help on. Here's an example:
bash> help alias
...some help text...
Obviously, you can obtain detailed help on the bash shell by typing man bash at your command prompt at any time."
The shell on the G1 doesn't seem to support it though...you would be better off getting comfortable in a real Distro and then apply the knowledge on the much less robust G1
This isn't quite so simple on Android.
First, you're not using bash. You're using either the android shell which is pretty limited or you're using the busybox shell (reachable with "busybox sh") which, I believe, is bourne shell compatible, but lacks some new features of bash.
Busybox is an single executible that implements a bunch of the common linux command line utilities. You're intended to symlink a bunch of command names back to busybox, but last I checked, this wasn't done so as to avoid stomping on the native android commands. You may need to type "busybox <command>" to run the right one.
To get a list of supported commands, run busybox with no arguments. Some commands have a --help option, but that won't be helpful for much of them unless you're already familiar with them.
The full documentation for any command is available as a "man" page (manual) on most linux systems, but you're not going to see it on an embedded system like android. But if you do a google search for "man <command>", you can easily find them. Many of the less basic options listed in the man page may not be available in the busybox version.
To get a list of busybox commands just type 'busybox'
If it flies off the top of the screen, type 'busybox | more'
I hope that helps.
Thanx everyone for the replies.
I had already printed out a command list which I googled. I will definitely try the busybox command. Although computers are not new to me, linux is. I am just having a slow time getting started, especially since busybox really isn't linux.
Why developers won't implement this request:
Brutal-Force: It's good that you got an answer by printing out a reference. That definitely will help you. Most of the utilities in JF's images support the standard GNU format of --help instead of /? so you're most of the way there.
Now, here are some reasons you won't get your actual request.
1) ? in the sh style shells is a protected character. To get remount /? you would actually have to type remount /\? or remount '/?'
2) All of the applications themselves would the have to be changed. Their relevant "getopts" or self-implemented methods of reading cmdline options would have to have the /? added to them. There's not a common point to change there. A quick count shows me over 150 different applications that would have to be changed.
3) It's ridiculous to cater to such a small crowd for something that is so labor intensive and can be done better with a simple documentation search.
Now go forth and RTFM. You'll be a better hacker for it.
note: JF likes notes. So do I.
note: A "hacker" is somebody like JF who makes hackable things do what hacker wants. Those other malicious @$$holes are called crackers. We don't like them.
whoa whoa whoa
First and most importantly,
BASH != DOS
Ever. Period. Don't even compare the two.
That said, learn how to google. BASH is very complicated with tons of command, keywords, etc. It is a scripting language after all.
Now, I do not see how it took you 1.5 hours (!) to figure out cp, as the first result of 'bash + how to copy files' in google gives you a link to all you could want to know.
For a complete list of command, type 'man busybox' in google and you are all set. Infact 'man YYY' will give you the manual for any command in Linux. Bash is not for those who do not want to learn, but, if one does learn it, there is no turning back from its goodness
Ok, Please take it easy on me.
This was not a "compare dos with linux" thread.
It was not a make my work a little easier thread.
I was updating 1.41 RC33 themes "AS USUAL". One of the theme designers made a boo boo. My phone went into loop while I was at work. The only computer I have access too does not have a USB port and is a Network computer that does not allow me access to this site. That being said, the only reference I had was to google linux commands. From the printout I had to figure out what does what. cp does not equal copy even though it shares two of the same letters. mv does in no way resemble rename so how on earth was I supposed to equate the two.
The problem with most people who already know linux is that they are not as helpful as a Dos or Windows "?" If they were I am sure there would be alot more people willing to give it a try. This is not really a rant, but I was asking for help, not begging to be tortured.
A few of the answers i.e. busybox helped. I did not know this, and at the time I could not look on the forum for help. I do not know about these other commands as well. Despite all that I was able to figure it out from a printout, I was just saying that knowing the list of Android based unix commands with a small one or two word description would go a long way.
P.S.
Thanx Just, Tiber and Boogie for helping me and not flaming me.
Bagkawilo
"Now, I do not see how it took you 1.5 hours (!) to figure out cp, as the first result of 'bash + how to copy files' in google gives you a link to all you could want to know."
See here is where you let your mightier then thou attitude get in your own way. For the record, that was exactly the pages I have printed out. Additionally, those pages give you way to much information to perform a specific task such as copy. Now, if i had gone to cp (Which again by the way does not mean copy to me, yes I might have figured it out quicker) but to me cp might as well have been cd.
Before I even got to that command I first had to figure out how to even access my sdcard. Next because this IS NOT DOS changing directories is, while similar, NOT THE SAME. What you have been practicing for quite some time may seem quite trivial to you, but for others its like learning a new language. I could perform the same functions in Dos or Paschal (The programmers language I learned in 15 years ago), BUT I am trying to learn YOUR language.
Seriously, I hope you never have kids who ask you how to do homework.
Just a thought
Brutal - I hope you don't think I was flaming you (you didn't mention me), because I certainly wasn't. It does come to my attention, though, that perhaps having root access on a bleeding edge image on a Linux based phone without any Linux experience is maybe like learning to pilot the Death Star before you figure out how to change the batteries in your light saber. It's good that you're learning along with the rest of us, hang in there. My recommendation: go download a copy of Slackware Linux and install it in a VirtualBox machine. Break it. Fix it. Learn how you fixed it. Break it some more.
/Just sayin...
ccosby said:
It does come to my attention, though, that perhaps having root access on a bleeding edge image on a Linux based phone without any Linux experience is maybe like learning to pilot the Death Star before you figure out how to change the batteries in your light saber.
Click to expand...
Click to collapse
As much as I enjoy a good Star Wars reference, this is a little off. I think it's more like learning to pilot a Speeder Bike before you figure out how to change the batteries in your light saber. We all know an Ewok can do it but just like the furball it's easy to go flying into a tree!
ccosby said:
go download a copy of Slackware Linux and install it in a VirtualBox machine. Break it. Fix it. Learn how you fixed it. Break it some more.
Click to expand...
Click to collapse
I'm not denying that is not a great way to learn, but unless you have a goal you're trying to accomplish it usually doesn't accomplish much. In my case I'd played with a copy of red hat years ago but without purpose so I didn't gain much. Recently I purchased a new router and loaded on a copy of DD-WRT. I had read about using it directly as a server (ftp/web/dlna) and even a bit torrent client. I wanted to use these features, so it took me a week of learning linux to get them installed. I broke the new features alot, but I didn't break my router.
So where am I going with this? I think perhaps instead of telling people to go out and learn it somewhere else, providing the answer and pitfalls to avoid would be more productive.
Like Benmeyers said.
I have had a couple different linux os's on my machine over the years, but they were only installed a very short while. I didn't see the "necessity" over windows.
Like Benmeyers said now I have a need for it. As many have pointed out, the busybox is not actually linux. What I need is to learn all of the busybox commands, which many have given me useful tips. Installing a while distribution of linux on my computer might just be overkill, and with root, I can do it just as well, after all.. it is like installing debian on my phone.
While I lived in Germany for 8 years, I HAD to learn to speak German, I went to a German Trade School because there were no American ones, and people at the one I went to did not speak English. My point is out of neccessity I had to learn it, and there were Germans who were proud that I was taking the time to learn THEIR language. I became very fluent because people took the time to help me. The ones that just laughed at me are the same ones that complained that the stinking Americans and other foreigners never bother to learn their language.
Anyway, thanx for all the help.
I'm just wondering is anyone trying this yet? i mean is it even possible?
Just a thought for you big shot android devs out there JF, Haykuro, LucidREM
Google "android jni"
Well, a quick trip around google would have helped you.
Android is using java, and currently it's not possible to use anything else.
But anyway, would you rather compile all of your code for multiple architectures? J makes things easier here...
You can write cli-apps in C though... i heard something about that there was plans to make other languages available in android, but i wouldn't hold my breath
Also, why is this related to JF/Haykuro/LucidREM?
I think you can do this with JNI: http://en.wikipedia.org/wiki/Java_Native_Interface
Using an ARM native compiler (such as the ones at CodeSourcery, http://www.codesourcery.com/sgpp/lite/arm/portal/[email protected]=lite) you can compile your apps and run them fine on the G1
Code:
$ arm-none-linux-gnueabi-gcc -static foo.c -o foo
$ adb push foo /data/foo # we are pushing to /data as it is +rwx (read, write, execute) for a standard user.
$ adb shell /data/foo
a=1
b=2
foo=a+b
foo=3
^^^
OH I love when I stumble across a post like this and have something new to play with.
The problem is due to the different location of the linker and mainly the different libc you have to statically link everything.
I have been having a hell of a time getting DPKG to build statically.
I picked up a copy of the newly released book, Unlocking Android, at Barnes and Noble yesterday. There is a whole chapter devoted to writing native apps using C (and ARM assembler) with the CodeSourcery tools linked above. The author walks through the steps you need to do to dynamically link the libraries so you don't end up with enormous statically linked executables. Well worth the price.
It is surprising what you can do with C on the phone, its actually not too difficult. The method outlined below doesn't use the non native toolchains and if you use the sourcery toolchain (as mentioned above) you will end up with bigger binaries as you need to link in a standard glibc and not androids bionic libc. This may or may not be important for your project.
The other advantage of the steps below is that you will build and link against any library that is available to the android platform
The easiest way that I've found to start when porting or writing new applications is this method.
1) Check out the current git android source.
2) Build the entire tree, "make" in the top level directory.
3) Create a new directory in mydroid/external/packagename/
4) Copy one of the simple android Android.mk (Make) files from a "like" target.
(If doing a library, choose a library, if coding an executable , choose that).
5) source the mydroid/build/envsetup.sh in the users bashrc
6) cd to your directory, then instead of the usual "make" do an mm.
This should create a binary, which you can adb push to the phone and run at the console.
You can do all the usual things if linked properly, like write the framebuffer using sdl, play sounds, create network connections.
Just remember that you dont have a standard libc (glibc) to play around with you have "bionic". If you are missing your favourite glibc function , it is probably intention and not abug. You'll either need to port it or make do with the functions provided by bionic.
These instructions are for a "pure" C program. you can mix the java like dex calling by 'shelling' out to the C application when you need performance, however premature optimization is the root of all evil, you'll be surprised what performance you can pull from davlik (And I expect the VM guys to improve this even further).
I know that is a lot to digest. Will do the best I can to answer your questions. I'm by no means an expert in the area, but have learned a bit about C on android.
Well I don't know much about all this but what i know is that e.g.
ScummVM IS written in C++ , and so is g-arcade.
His FAQ says:
"How did you do this? Is it Java?
No. ScummVM is a C++ program. For this port, I turned it into a really big JNI library so Android still thinks it's running a Java program, but almost all of it is implemented in C++."
(http://sites.google.com/site/scummvmandroid/faq#TOC-How-did-you-do-this-Is-it-Java-)
So if some1 wanna port MAME, feel free to xD
Hi, I'm beginning c++ Development, Done a little stuff with OpenGL but love challenging myself with command line stuff. For this, I mostly use gcc, and either geany or nano.
I did have debian on my G1 so I could use nano and gcc. It worked well, but the only way of getting files to and from would be via ftp.
I was wondering if people who had experience compiling command line stuff for android (Hasn't Bash recently been ported?) could help or give me some tips? nano + gcc would be awesome, though gcc is a must, I'd be able to copy my app to my g1's SD card and have my terminal apps on the go, great for long journeys and stuff.
I'd even be tempted to look at writing an IDE in Java (though I've not much experience in GUI development, I have in programming theory).
Plus, are there instructions for actually compiling linux apps for android, I don't seem to have found any anywhere, and It'd be good, that we could maybe compile more apps like rtorrent and such.
I'm more of an Desktop programmer, writing all the background work and shying away from the GUI stuff. I'm good with commandline scripting type work, and stuff like that, but I want to create something for android that will access the filesystem and manipulate things in the system directory. How can I best accomplish this? I'd prefer a computer application, but I dont know how to write a program that will access things in the command line...
damastah said:
I'm more of an Desktop programmer, writing all the background work and shying away from the GUI stuff. I'm good with commandline scripting type work, and stuff like that, but I want to create something for android that will access the filesystem and manipulate things in the system directory. How can I best accomplish this? I'd prefer a computer application, but I dont know how to write a program that will access things in the command line...
Click to expand...
Click to collapse
Have you tried to simply write it with C, C++ or any other language you like and just crosscompile it to ARM? I don't see any reason why this doesn't work, when the programs are just for yourself
Greetings,
KanocX
Hey all-
I'm very interested in learning Linux in order to not only do cool stuff at home with my own computer, but also to perhaps be of service in developing ROMs and give back to the devs who've helped breathe life into my ol' OG Evo for nigh-on two years now. If I ever got to the point of doing some 'grunt work' and helping out on a project, that'd be awesome for me.
Here's where I'm currently at with Linux: I've followed instructions to dual-boot Ubuntu on my Windows 7 laptop (yay!!!!), but other than installing Chrome and using all my Google services (Gmail/Docs/etc.) through that, I'm not really sure what else to do in order to become fluent with Linux. It's kind of like reading a book on how to build a car, but not knowing one end of a wrench from another.
Here's where I'm at with Android: I can follow instructions to root my phone, flash ROMs, install the Car-O-Dope tweaks on GB ROMs using System Tuner and ROM Toolbox, and most basic things that include using Smelkus' recovery (flashing, wiping, nandroid/restoring, etc). I'd say I know more than the average Android user, but certainly not as much as the experts here.
I've looked on a variety of forums both here and on Ubuntu's site, but I'm not really sure how people got their start using Linux and how they progressed from there in terms of fluency with Linux, applying that to Android developing, and also generally using it as a 'one-stop shop' for home use. I've read about people being able to build HTPCs on the cheap, using a computer as a file server/web site host (my wife's a graphic designer, but hates technology, natch)/media streamer/home security server, but as soon as the instructions get to "Ok, now open up your command line and follow these 28 steps......", I get a bit gun-shy.
If anyone's got any helpful tips on how they got started, any good beginner's guides (project-oriented would be great, just as reading a book on speaking a foreign language is no substitute for conversing with a native/fluent speaker), and how they grew in fluency or just any general advice, it'd be greatly appreciated. I'm putting this here and spreading it around in the hopes that some of the WAY talented XDA devs and members I've read so much from will toss a bone in my direction.
Thanks for reading and for any help!
Get very familiar with Terminal. For Android dev or otherwise, it is essential. Reading man-pages is also good to learn new commands better. In Terminal, just type "man man" minus quotations. That will get you going.
Sent from my PC36100 using xda premium
You should definitely make an effort to become comfortable with the Linux command line environment (also known as Shell, the most common Shell currently is BASH).
Try giving yourself some useful activities to do, such as: setting up a home file server with Samba, setting up a media streaming server (DLNA - Plex Media Server is a great program for this), just little things like that.
Before you know it you'll be a pro
markinaus said:
You should definitely make an effort to become comfortable with the Linux command line environment (also known as Shell, the most common Shell currently is BASH).
Try giving yourself some useful activities to do, such as: setting up a home file server with Samba, setting up a media streaming server (DLNA - Plex Media Server is a great program for this), just little things like that.
Before you know it you'll be a pro
Click to expand...
Click to collapse
So, is Bash something I download/install, or should it be already 'packaged' in with Ubuntu?
go to the development forum on ubuntuforums.org and find out how to upgrade to ubuntu 13.04. As that version is currently in development you should get a chance to learn a few things. That's how I learned modern linux distros. Also setting up and playing around with Ubuntu server edition might be helpful.
For app development Google some Java tutorials. Once you get the beginners stuff out of the way you should be ready to learn android development with your new Java skills.
Sent from my GT-I5500 using xda app-developers app
---------- Post added at 06:01 AM ---------- Previous post was at 05:47 AM ----------
just using Ubuntu for your day to day tasks should also help. When the other Guy was talking about bash he was talking about the terminal in Ubuntu. its a command line that lets you enter various commands. Google 'Ubuntu terminal' for more info
Sent from my GT-I5500 using xda app-developers app
Joshmccullough said:
So, is Bash something I download/install, or should it be already 'packaged' in with Ubuntu?
Click to expand...
Click to collapse
No Bash is something that is already packaged with Ubuntu, it is one of the most essential elements of Ubuntu (and Linux in general) because it gives you a means of interfacing with everything else. If you have a type of Linux with no graphical interface, then the shell is your only means of interfacing with the operating system at all.
So in short, yes Bash is packaged with Ubuntu and every other kind of Linux out there (if it's not, a different shell will be packed with it, but Bash is the most common one).
Maybe something for later but I have seen a number of different Dev threads about getting started with AndroidDev, I know that I have seen at least about 10, all from different perspectives/starting points. One that I could find easily was the following:
http://forum.xda-developers.com/showthread.php?t=1778984
Check it out. Basically, says ... Linux (fundamentals), CLI (command line interface or shell, fluent), Java (fundamental), XML (medium), SDK (medium) and Time - to start with at least. Hope that is useful.