[Q] c++ native development for android - Android Software Development

So I got my hello world written in C working on my G1, happy as can be.
I have a pile of stuff I'd want to run on my g1, but it's all written in C++, so I happy to find an arm-eabi/bin/g++ binary which after a little poking around, I got it to compile all my source clean.
But it choked badly on the link.
I used a copy of agcc.pl that had been 'fixed' to work with the google toolchain (forgive me but I forget the tutorial I got it from) and I changed it to point to g++ instead. So it at least compiles.
The errors I get are largely
undefined reference to `operator delete(void*)'
and friends and cousins. Before I go nuts trying to reverse engineer the whole toolchain, is there some obvious simple library I should be linking?
Anybody can point me towards a tutorial or reference would be great, I can't find any.
Who knows, maybe I'm pioneering something here. I somehow doubt it though.

Sounds like your missing libstdc++

well I figured out it had something to do with virtual destructors. If I get rid of my virtual destructors then some of the errors go away.
Basically subclassing causes these errors to show up.
Then I found this:
Exact same problem and sort of how to fix them.

yeah, but there is no libstdc++. I then tried a simple c++ program with just one class and it built and run cleanly, so everything is there, it's just the virtual destructors.

Related

Absuluut newbie, help on eMbedded C++ 4.0 please

Hello,
I'm a Visual Basic programmer for some time now.
Made some useful stuff they tell me.
Used C++ (Borland) about 10 years ago, so that’s a bit rusty.
Now I've ordered a Qtek 9090, and I would want to develop some software for it to. So I downloaded and installed the SDK and eMbedded C++ 4.0.
I thought, I start out on the emulator......
I can't even get my own "Hello world" program to work........
I have downloaded a "Hello World" program which I stepped through in debug mode. I have NO idea what they are doing there.
It contains about 20 files, hundreds lines of code, just to put "Hello World" on the screen of the emulator.
And I hoped that:
Code:
#include <stdio.h>
main()
{
printf("Hello, world!\n");
return 0;
}
pleased in a form, would do the trick………
The help in the IDE does not work.
Re-install it tell's me. I have done so, but the help function does not work.
Where is the "visual" part in the embedded Visual C++?
How do I place forms and buttons e.g.?
I have no idea where to start now.
Searched a lot of forum's for starters-help, but I can not find anything that helps me on my way. I just hope I've not become stupid.....
Would somebody please help me on my way?
Can I wholeheartedly recommend the book "Programming Windows CE", by Douglas Boling? It's normally cheap (or the second edition is) on ebay and it really is good.
Failing that, you're writing a console based application for something that uses a windowing environment by default, so you'll either have to change what you're linking to, or have a winmain that makes use of a graphical UI rather than stdout. Call MessageBox perhaps? This is all made *so* much easier with a working help system that you need to get that working.
You can manage resource files visually, so it really is Visual development. Plus, for free, it's an excellent development tool. Well, it isn't bad.
The best advice I can give is to get your machine set up correctly with EVC2002, or EVC 4 with SP4 and the appropriate SDKs, and take it from there.
Good luck starting out.
Cheers,
Nick.
chiark said:
Can I wholeheartedly recommend the book "Programming Windows CE", by Douglas Boling?
Click to expand...
Click to collapse
Thanx. I'm going to order that book.
Failing that, you're writing a console based application for something that uses a windowing environment by default, so you'll either have to change what you're linking to, or have a winmain that makes use of a graphical UI rather than stdout. Call MessageBox perhaps?
Click to expand...
Click to collapse
Well, yes. I know. Like I sayed, I usualy work with VB. It was just me, trying to oversimplify things.
What I ment to express is that I'm pretty supprised I still have to write the message-loop and the main-loop and the jsadgkh-loop and....
I just hoped to put up some forms and attach code to it. But maybe I'm missing the clue on this.
This is all made *so* much easier with a working help system that you need to get that working.
Click to expand...
Click to collapse
I have set it up on an other machine yesterday, and there the help works.
Today I'm going to make use of it.
You can manage resource files visually, so it really is Visual development. Plus, for free, it's an excellent development tool. Well, it isn't bad.
Click to expand...
Click to collapse
Well.... That part, the visual part, I don't see yet, but like I sayed, I'm going to work throuhg the help, now that I've got that working.
And a 'free' tool. Well, that's allways nice. I think it is good for us, AND good for them. The more software there will be on the market, the better the devices sell.
The best advice I can give is to get your machine set up correctly with EVC2002, or EVC 4 with SP4 and the appropriate SDKs, and take it from there.
Good luck starting out.
Cheers,
Nick.
Click to expand...
Click to collapse
Thanks for you tips.
Rens
Dox, drop me a PM, I've got an old copy of the book you can have if it would help
Re the message loop stuff, you've indeed got options. You can either use the message loop approach hitting the API directly, or you can opt for using MFC to abstract the stuff away from you.
Personally, I prefer the straightforwardness of using the API rather than MFC. By the time you've written one application, you've got the bulk of the next . I also write for older machines, and the overhead of MFC is a consideration, but on the XDA it really isn't.
If the application is simple, it can all be handled by a DialogBox. You will need to write a DialogProc to handle the appropriate messages, but the need to register a window class, get messages off the queue etc is removed from you. Similarly, you can have multiple pages on a single dialog box using propertypages.
If you did want to write a console application, you can do this but you need to change the linker options within EVC.
Have a good look at the samples, too, there's some real good stuff in there.
Cheers, and good luck
Nick.

decomiling and recompiling - newb question

Hi,
Can someone assist me with how i might go about decompiling or viewing a dll, making changes to it and recompiling it? What tools can i use to do this?
I have tried copying some of the dlls from my device over to my local pc, however most of the time i get an "access violation" message.
Further, i realize i can use idlasm to disassemble .net files, but it seems most of the more interesting dlls and files may be standard c dlls. How can i take a look at the code in these and modify if wanted?
thanks much.
farseer: what level of experience do you have?
V
I'd like to think i am decent developer, but that may be in my own mind
However, i do not do a lot of "hacking", i.e., have not had the need to do much reverse engineering. I have been coding ground up apps for over 10 years however, uisng C++, Java, C#, VB, etc. You name the language, and i've probably done something in it .
vijay555 said:
farseer: what level of experience do you have?
V
Click to expand...
Click to collapse
was that the wrong answer?
farseer said:
I'd like to think i am decent developer, but that may be in my own mind
However, i do not do a lot of "hacking", i.e., have not had the need to do much reverse engineering. I have been coding ground up apps for over 10 years however, uisng C++, Java, C#, VB, etc. You name the language, and i've probably done something in it .
vijay555 said:
farseer: what level of experience do you have?
V
Click to expand...
Click to collapse
Click to expand...
Click to collapse
The correct answer should be "I know ARM assembler language, the structure of Win32 PE files, I know what is XIP DLL and why I cannot modify them directly, and I have read the WM5 source code".
In this case the process is simple - you decompile a DLL with IDA (www.datarescue.com), find the place you need, modify the code to suit your needs - and that is all. In most cases there is not enough place in DLL for your code, so you need to use virus-like techniques, my prefered method is to patch the code so that it loads my DLL and run it instead of original code. Or use some other hooking methods so that my code is executed instead of original.
Ah, thanks much, this was helpful. I do have a few follow up questions:
1. Is "Arm assembler" different than standard assembler? If so, any suggested readings?
2. There are some dlls that cannot be copied to my local pc (i get an access violation i believe). How does one extract an image of such dlls?
3. Where is the WM5 source code? and why would i need to read this to be able to hack/patch dlls?
thanks again.
mamaich said:
The correct answer should be "I know ARM assembler language, the structure of Win32 PE files, I know what is XIP DLL and why I cannot modify them directly, and I have read the WM5 source code".
In this case the process is simple - you decompile a DLL with IDA (www.datarescue.com), find the place you need, modify the code to suit your needs - and that is all. In most cases there is not enough place in DLL for your code, so you need to use virus-like techniques, my prefered method is to patch the code so that it loads my DLL and run it instead of original code. Or use some other hooking methods so that my code is executed instead of original.
Click to expand...
Click to collapse
Hi farseer!
I am nowhere near the level of mamaich or vijay555 but I have some experience in this and I believe I can give you some basic answers:
1. ARM is a different architecture then x86 processors and the assembler is different to accommodate it. There are some basic similarities like mov add and such, but even the registers are different (R0 - R15 if I am not mistaken). Sorry, I don't know any books on it, but if you google you will quickly find the list of commands with basic explanation.
2. Since the OS is in ROM you can't just copy and paste it's DLLs and EXEs. Look for ROM dumping tools on this forum, or already extracted images on the ftp. Keep in mind MS did some tricks to save memory and make it harder to get at the files, so like mamaich said, you need to learn about XIP and the ROM structure in general to understand whats going on.
3. Hmm... MS does have a program for sharing most of WM source code, but it's not for common people like us. (check out their site to see what I mean) I suspect there are other sources of getting the parts necessary to understand DLL hooking, but I have no idea what they might be.
Well that's my two cents until an expert can answer you. Hope this helps.
farseer: you gave a perfectly good answer IMHO, just needed to get an idea of what level to pitch a response without talking up or down to you!
It's well documented that I'm a self confessed newb to c++, and would say that your programming skills should certainly hold you in good stead. However, having a good knowledge of the Win32 API is certainly beneficial.
For decompiling, basically IDA. There is an IDA demo available on their website that should get you going, it's pretty much 100% functional other then it won't save, and closes itself (or crashes itself) after a reasonable, random period of time. IDA is "the daddy" for pretty much all mainstream reversing, although you could write your own decompiler/debugger.
Recompiling - that's a toughy. IDA won't permit recompiling on ARM AFAIK.
You'll have to hexedit into the target and patch directly. Otherwise you get into the exciting world of code injection, hooking etc, as Mamaich says.
For that area, read everything he's ever written, before you start reversing
Oh, and a helpful hint to all. Don't just read what Mamaich's written on this board, his posts on other boards are even more useful!
It's worth getting a good familiarity with reversing on x86 first, get used to how IDA works etc (and Soft Ice is very useful to give a good insight into x86, although AFAIK it's not available for WinCE). ARM assembler is different, but just grab a list of the opcodes and read through a few CPU developers' guides (online).
There are a number of tutorials on reversing ARM stuff online. In the usual places for that kind of stuff.
For getting access to the ROM files, easiest way is to grab a rom update file and decrypt it. Mamaich is once again your man, his romtools do the job. He also has a "live" rom grabber, that'll grab all the files/modules out of your running phone for your perusal.
Platform Builder is available free to give you (some) WinCE source code. Not all, but enough to give you years worth of reading.
V
Thanks all...very kind of you to respond in such detail. I look forward to dabbling a bit with IDA and some of mamaich tools. I suppose the first order of business is to do a lil more research and then just dive in! It's been a while since i wrote any assembly code (not since college!), but i am a bit excited at having an excuse to do so again.
thanks again.
Just remember that unless you really luck out and the developer left the symbol table intact, you're going to end up with garbage for the names of variables and subroutines.
I hate reading decompiled code.

So many question, so little time.

Hello all,
I am new to the Android scene and I wanted to find out if there are any good tutorials on app/rom development, what are the programming languages used, etc... I know learning from scratch is probably a long and bumpy road, but it is something I am interested in. I have already rooted and flashed my phone, good times that was. Thank you all for your help.
Th3Cap3
What's your existing programming experience? You could do worse than check out the anddev forums. App development is principally in Java though you can write parts of apps in C or even assembler.
My existing programming consist of very very very basic python, and some web stuff like HTML and CSS, I would basically have to learn how to program the ones you have mentioned from scratch, I have books for most of those though. I will go check out those forums and see what I can dig up Thanks for the info.
I bookmarked that page thank you, I just got a hold of their Eclipse software and all of their beginner tutorials I can't wait to dive into this stuff.
Me too. I know C, but only have a passing acquaintance with Java & Linux; Android I know even less about, not having encountered it till getting my Hero in February. I'm working my way through Thinking in Java (Eckel) to be followed by Professional Android 2 Application Development (Meier).
Even if your grasp of Python is basic it's still a start - you don't have to struggle again with fundamental procedural programming concepts like conditional execution, program flow control & so forth. Plus Python is an OOP language, aiui (I don't know Python) so you have a head start there too
I've installed Java, Eclipse & Android's SDK on this Windows box, but I'm thinking of dual booting Ubuntu as some things just work better in Linux, especially if one wants to cross compile ROMs. Aiui Cygwin, which I already use, can be a little problematic & when one is likely to be asking for help at times, it's useful to be using a similar set up to most devs.
I have been thinking about dual booting again, I just havent had to time to partition my drive and install some sort of linux release, UBuntu is the one I am most familiar with, which isnt very, but its a start.
I am going through those video tutorials from anddev.org right now, it seems to be similar to Python in the way the coding is done, I am excited.
I have also downloaded the Eclipse program, but I have the pulsar version, it seems to be geared more towards mobile development and I have gotten the Android toolkit installed and I have had the Android SDK from when I rooted my Hero (Which is awesome, running the newest Damage Control) good times.
I think I may have a java book on PDF somewhere as well, I will have to go look.
Atm I can't make up my mind between dual boot & Virtual Box, or maybe both, to see if I can wean myself off m$
I have been thinking about the dual boot option a lot since you mentioned it, not sure what to do, I may wait till this quarters class is over so that if something goes missing. it Sony be a big deal
Sent from my HERO200 using the XDA mobile application powered by Tapatalk

What do you use to develop with?

I have been trying to learn how to do some android development for work and keep running into problems. I find it hard to believe that people are able to create a lot of these apps with the Google development tools in such poor condition.
I have set up a development system with eclipse and the android tools. One of the first problems I ran into is ADB crashing whenever I tried to debug and there was a device attached to the system. Didn't matter if I was trying to debug on the device or emulator, ADB would crash. I was finally able to get the problem fixed by using the Composite ADB interface driver instead of the plain ADB interface (would it really hurt Google to add one sentence to the directions to tell people this?)
Now every time I go to debug, the emulator comes up in Chinese/Japaneses. I type in English and it converts it. I can fix it by changing the input method, but I have to do it every time I start the emulator. I have Googled looking for a solution and have found this is a known problem that has been around for almost a year and there is no resolution with it. The bug reports I have found on the android site even lists them still as NEW!
When trying to debug a problem, I wanted to delete the shared preference file for the app as it seems like it had become corrupted and every time it went to read it, the app would force close. (And when this happen, the debugger perspective would come up but for the life of me, I could not find any information as to what caused the fault or any sort of stack trace to look back and see where in my code it failed).
If you are an app developer, are you running into these issues? Have you found ways to work around the problems? I just can't believe that this is the way people develop for this platform. I'm ready to tell my boss that we forget about the platform unless we can find some stable development tools, otherwise we will be spending more time fighting with the tools than working on the app.
If anyone has any suggestions, I would really like to hear them. I'm not a noob when it comes to software development (20+ years as a software engineer), but I have never seen development tools for such a major platform, be this poorly done. What am I missing?
I'm a professional developer as well too. 20 years or so as a C/C++ developer, but I've worked most of my career as a Unix developer. Naturally, I use linux where possible and my Eclipse setup on Gentoo linux is pretty stable. I tried on Win7-64 but it was buggy as heck. I believe that the problem is with Java. There seems to be so many ways to set it up wrong that I'm not sure you can set it up right under windows.
I find it ironic that Oracle is trying to sue Google for making a JVM that actually works!
I havent had any of your mentioned issues. I am running eclipse on a 32 vista machine and a 64 bit windows 7 machine.
Not sure what I may have done different that you for setup. But I followed the Android application development for dummies book. The author goes step by step of what to download and how to install and configure. Even though your software experience is way beyond this book maybe its worth picking it up to read the install notes.
FreeTheWorld said:
I havent had any of your mentioned issues. I am running eclipse on a 32 vista machine and a 64 bit windows 7 machine.
Not sure what I may have done different that you for setup. But I followed the Android application development for dummies book. The author goes step by step of what to download and how to install and configure. Even though your software experience is way beyond this book maybe its worth picking it up to read the install notes.
Click to expand...
Click to collapse
I picked up the book, "Sams Teach Yourself Android Application Development in 24 Hours" and it has a section for setting up the environment too. Followed it to the letter several times and always had this problems. I think the issue comes down to the books were written using version 6 and 7 of the SDK and the current version, 8, has introduced some problems the books don't cover. For example, the tools directory has been split into two directories, tools and platform-tools. When you first download the SDK, you don't get everything you had like before until you update the SDK.
I have talked to several other people who also had the problem with the ADB crashing like I did, even started a thread here about it. No one could get any help anywhere on resolving the issue. I think the problems I have that others don't see is because they started with an earlier version of the SDK.
Gene Poole said:
I'm a professional developer as well too. 20 years or so as a C/C++ developer, but I've worked most of my career as a Unix developer. Naturally, I use linux where possible and my Eclipse setup on Gentoo linux is pretty stable. I tried on Win7-64 but it was buggy as heck. I believe that the problem is with Java. There seems to be so many ways to set it up wrong that I'm not sure you can set it up right under windows.
I find it ironic that Oracle is trying to sue Google for making a JVM that actually works!
Click to expand...
Click to collapse
I have also setup the development platform on a linux system and haven't had the problems I have with Windows 7 64bit. I also feel a lot of the problems have come from the Windows 64bit platform and even windows in general. I tried installing on a clean 64bit and 32bit Windows 7 and was still having the ADB problem. As soon as I get my tax refunds, I'm going to get a work desk setup at home so I can try using my linux system (it sits on the floor with no monitor and is my network server). Boss will really love it if I tell him we have to set up linux platforms to develop on. Guy is a bit of a tight wad when it comes to equipment.
edboston said:
If you are an app developer, are you running into these issues?
Click to expand...
Click to collapse
Nope, I didn't have any stability problems with SDK. I use linux 32-bit, didn't try to work on a Windows, MacOS and/or 64-bit arch.
I've not seen any of your problems, either.
FYI, I followed these instructions to set up the env:
http://developer.android.com/resources/tutorials/hello-world.html
(Environment - WinXP/32 netbook)
Eclipse is buggy. The most annoying issue with it is that the auto complete freezes your computer at times.
An alternative is IntelliJ. They offer a free community addition. I work with one dev that swears by it.
I use Windows7x64 and Ubuntu 10.10 to develop my apps. I use IntelliJ mostly because I find Eclipse to be convoluted overcomplicated mess. I think the Android integration in Eclipse is better, especially around editing some of the key XML files but I despise how projects are organized in Eclipse.
The OS you use really doesn't matter the results are the same, once you're up and running the work will be the same so the OS becomes irrelevant. The IDE becomes the differentiator.
I haven't met with the issues you mentioned, but as you said it can be because I installed the sdk a long time ago (after google anounced the eclair). I'm using eclipse and yes, that program is full of bugs, but I read an article about developing for android in Netbeans (my personal favorite). You can read it here: http://androidportal.hu/2011-01-09/fejlesztes-androidra-netbeans-segitsegevel (it's hungarian, but google translate is our friend)
Sent from my GT-I5700 using XDA App
MotoDev Studio 2.01
stick to 32-bit Galileo
for the slow autocomplete problem, I've made sure to use eclipse Galileo, something in Helios was causing massive lag. Also make sure you're running the 32-bit version of eclipse, even if your machine is 64-bit, there are definitely some bugs last time I tried to install ADT on 64-bit eclipse.
the new tools directory was a bit of a pain after updating to the latest API but nothing too bad once you figured it out.
I haven't had many of the other problems you mentioned. I always debug with adb logcat from terminal, and you can always hop into the device with adb shell.
I use eclipse every day at work so I've kind of gotten used to all the little quirks. I had the chinese text problem with the emulator, but I do most of my testing on a real phone. I use the emulator just to try out different resolutions.

nook touchndevelopmemt toolchain Qs

Hi All,
I'm a software developer, reasonably comfortable with compiling apps in Linux, though still got more to learn on inner workings of the full system.
I've been thinking about following the Linux from Scratch book for a while - and also about converting my Nook e-reader into a useful device for developing on when out im the sun.
I guess there are some significant challenges here - device trees and commercial secrets, perhaps some crypto keys used for signing update images to boot (I'm familiar with these problems, but not solutions or good workarounds).
What I'd really like is a good understanding of:
- what tool chain I need to setup
- What has been tried already and what the problems were
- any further help/datasheets that can get me going
I'd have posted this in the 'android development' area as the closest forum for what l'm trying to do, but apparently I'm not allowed until I've got my post count up - so I'm being forced to post in 'general'. If someone agrees and can move it, that would be great.
P.s. I have searched the xda site, but I'm not finding what I'm looking for. I'm sure it must be here somewhere, so any pointers/links on where it is would be appreciated.
SimonSimpson said:
Hi All,
I'm a software developer, reasonably comfortable with compiling apps in Linux, though still got more to learn on inner workings of the full system.
I've been thinking about following the Linux from Scratch book for a while - and also about converting my Nook e-reader into a useful device for developing on when out im the sun.
I guess there are some significant challenges here - device trees and commercial secrets, perhaps some crypto keys used for signing update images to boot (I'm familiar with these problems, but not solutions or good workarounds).
What I'd really like is a good understanding of:
- what tool chain I need to setup
- What has been tried already and what the problems were
- any further help/datasheets that can get me going
I'd have posted this in the 'android development' area as the closest forum for what l'm trying to do, but apparently I'm not allowed until I've got my post count up - so I'm being forced to post in 'general'. If someone agrees and can move it, that would be great.
P.s. I have searched the xda site, but I'm not finding what I'm looking for. I'm sure it must be here somewhere, so any pointers/links on where it is would be appreciated.
Click to expand...
Click to collapse
I have tried to get info on such things three times over 2 years for different devices, no one every seems to point me in the right direction, the most i have been able to find out is how to make compile cm and a little bit of how to customize roms, not to be a downer but i think the process is often so different for ever device and difficulties usually happen that the only people that build roms are people that have either have experience I n some form from their job, just edit existing source for cm(updating to a new version, customizing roms ect...) or have screwed with the stuff for years till the point that they just figured out alot of problems themselves. Wish a could find a good guide myself to atleast get the basic dependencies required for a device to boot together, if i could get something to boot the rest of the issues could be worked out with trial and error, boot noone on xda, Android authority, Reddit or cm's own forums goes into enough depth to make that possible.
Hi jaykoerner,
Thanks for your reply - good to know I'm not alone with my echo!
I've discovered some useful links if anyone wants to begin getting to grips with all this...
1. XDA Devs has a wiki (not sure how to find from the forum links...?)
http://forum.xda-developers.com/wiki/BN_Nook_Simple_Touch
2. There's a (atleast one) customized kernel (and probably a dev-tool chain) available on GitHub:
https://github.com/javifo/NST/tree/master/kernel -- including kernel compilation instructions
https://github.com/javifo/NST -- root of the repository.
3. Parallel to Raspberry Pi kernel compilation (so you may want to learn from that as it probably has more articles)
https://www.raspberrypi.org/documentation/linux/kernel/building.md
I'll post more when I next do something with the information (Still want to understand more on the android HAL)
Hope that helps someone!
SS.
SimonSimpson said:
Hi jaykoerner,
Thanks for your reply - good to know I'm not alone with my echo!
I've discovered some useful links if anyone wants to begin getting to grips with all this...
1. XDA Devs has a wiki (not sure how to find from the forum links...?)
http://forum.xda-developers.com/wiki/BN_Nook_Simple_Touch
2. There's a (atleast one) customized kernel (and probably a dev-tool chain) available on GitHub:
https://github.com/javifo/NST/tree/master/kernel -- including kernel compilation instructions
https://github.com/javifo/NST -- root of the repository.
3. Parallel to Raspberry Pi kernel compilation (so you may want to learn from that as it probably has more articles)
https://www.raspberrypi.org/documentation/linux/kernel/building.md
I'll post more when I next do something with the information (Still want to understand more on the android HAL)
Hope that helps someone!
SS.
Click to expand...
Click to collapse
My initial thought was that toolchain should match the underlay Linux kernel of Eclair (2.6.x.y) for us to be sure it could be run on NST. This info that I still have to search through is certainly helpful. Thanks!
SimonSimpson said:
I guess there are some significant challenges here - device trees and commercial secrets, perhaps some crypto keys used for signing update images to boot...
Click to expand...
Click to collapse
Neither the NST or the newer glows use device trees.
In the Glows this is all handled by the custom ntxconfig which allows simple configuration.
For building Android apps, you use the straight Android SDK, possibly also the Android NDK (for native code).
You'd also use the NDK for building command line utilities.
I've never built a kernel from scratch, but I have binary modified/patched them.
There is the simpler bit of patching system image ramdisks which can be conviently handled by my imgutil.exe in the signature.
If you want to do audio, you really are better off with the Glow4 (7.8") which actually supports it.

Categories

Resources